현재 AddAtIndex 메서드를 구현 중이며 대부분 잘 작동하는 것 같습니다. 그러나 제 방법은 JUnit 테스트를 통과하지 못하고 이유를 이해할 수 없습니다. 따라서, 나는 지금까지 수행 한 코드를 보여주기 위해 선택한 :현재 LinkedList에 AddAtIndex 메서드를 구현하고 있습니다.
**
* Add an element to the list at the specified index
* @param The index where the element should be added
* @param element The element to add
*/
public void add(int index, E element) //Method should be O(1) time.
{
// TODO: Implement this method
if (index < 0) {
System.out.println("Can't add an element at a negative index.");
}
int i = 0;
LLNode<E> currentNode = head.next;
while (i < size) {
if (i == index) {
LLNode<E> newNode = new LLNode<E>(element);
LLNode<E> tempNode = new LLNode<E>(currentNode.data);
currentNode.next = tempNode;
currentNode.data = newNode.data;
newNode.prev = currentNode.prev;
newNode.next = tempNode;
tempNode.prev = newNode;
size++;
}
currentNode = currentNode.next;
i++;
}
}
코드 뒤에 내 생각 프로세스는 방법은 다음 링크 된리스트의 지정된 인덱스에있는 데이터를 대체, 새로운 노드를 생성하는 것입니다 . 그러나, 대체중인 노드의 데이터는 새 노드 다음의 다음 노드로 증가되는 임시 노드에 저장됩니다. 코드가 다소 엉성하기는하지만 필자는 구현에 대해 80 % 확신합니다. 구현을 시연 할 드라이버를 만들었습니다. 다음 드라이버 코드 :
public class LinkedListDriver {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyLinkedList<String> nameList = new MyLinkedList<String>();
nameList.add("Hamadi");
nameList.add("Ballo");
nameList.add(1, "Salisu");
nameList.add(2, "Galo");
System.out.println(nameList.toString());
System.out.println(nameList.size());
nameList.set(2, "Abdullahi");
System.out.println(nameList.toString());
nameList.remove(1);
System.out.println(nameList.toString());
MyLinkedList<Integer> list1 = new MyLinkedList<Integer>();
list1.add(65);
list1.add(21);
list1.add(42);
System.out.println(list1.toString());
list1.remove(0);
System.out.println(list1.toString());
}
}
다음과 같이 운전자의 출력은 : 그것은 AssertEquals 방법에 실패
:
List: Hamadi, Salisu, Galo, Ballo,
4
Replacing Galo with Abdullahi
List: Hamadi, Salisu, Abdullahi, Ballo,
Removing Salisu from the list
List: Hamadi, Abdullahi, Ballo,
List: 65, 21, 42,
Removing 65 from the list
List: 21, 42,
유닛 테스트가 다음 오류 그러나 실패 :
shortList.add(2, "E");
shortList.add(3, "F");
**assertEquals("AddAtIndex: at position 2 ", "E", shortList.get(2)); //fails here**
assertEquals("AddAtIndex: at position 3 ", "F", shortList.get(3));
assertEquals("AddAtIndex: List size is ", 6, shortList.size());
내가 뭘 잘못하고 있는지 알고 싶습니다. 나는 이것을 문자 그대로 완전히 알아 냈다. 비록 나의 AddAtindex 메소드에 대해 조금 벗어난 것이있다. 감사!
디버거를 사용하고 포인터가 어떻게 움직이는 지 확인하십시오. –
초기 출력에서 추가 메소드가 대부분 작동한다고 말할 수 있습니다. –
당신은'for' -loops에 대해서도 배워야합니다 : for (int i = 0; i