2016-06-17 2 views
0

코드 :내 심장 박동 모니터를 사용하여 DoublyLinkedList에 대한 addAfter()에서이 오류를 어떻게 수정합니까? AssertionError를 : 예상 예외 : NoSuchElementException이

* Inserts a new value in the list after the given Node. For example, 
* if the list is 1,2,3,4, and listNode is 2 then addAfter(listNode,9) should give 
* 1,2,9,3,4. 
* @param listNode the new value should be inserted after this node 
* @param t the value to insert 
* @return the newly created Node 
*/ 
public Node<T> addAfter(Node<T> listNode, T t) 
{ 

    Node<T> newNode =new Node<T>(t, listNode, listNode.next); 
    newNode.next=listNode.next; 
    listNode.next=newNode; 
    newNode.prev=listNode; 
    size++; 
    return newNode; 
} 

나는 또한 NullPointerException 오류가 발생합니다.

어떻게 해결할 수 있습니까?

답변

0

링크 된 목록의 요소 앞뒤에 요소를 추가하려면 Node 개체 자체 대신 값을 검색하십시오.

addAfter 메소드의 인수로 전달한 Node 객체가 해당 참조가 동일하지 않기 때문에 목록의 동일한 값을 가진 Node와 동일하지 않기 때문입니다. 직전 우리가 새로 만든 노드를 추가 할 필요가 후/

Node searchNode = new Node(10); 
addAfter(searchNode, 10); 

우리는 노드의 값을 검색한다 - 우리는 노드 객체를 생성하여이 같은 방법을 요구하고있다 말할 수 있습니다. [10,20,30,40]와 -이처럼 보이는 LinkedList의가 있다고 가정하자

public Node addAfter(int searchVal, int val) 
{ 
     Node newNode =new Node(val); 
     Node temp = head.getNext(); 
     Node q = null; 
     if(tail.prev.getData() == searchVal) 
     { 
      newNode.setNext(tail); 
      newNode.setPrev(tail.prev); 
      tail.prev.setNext(newNode); 
      tail = newNode; 
      length++; 
      return newNode; 
     } 
     while(temp != null) 
     { 
      if(temp.getData() == searchVal) 
      { 
       q = temp; 
       break; 
      } 
      temp = temp.getNext(); 
     } 
     if(q != null) 
     { 
      newNode.setNext(q.getNext()); 
      newNode.setPrev(q); 
      q.getNext().setPrev(newNode); 
      q.setNext(newNode); 

     } 

     length++; 
     return newNode; 
} 

- 다음은 샘플 코드입니다 그리고 난 당신이 당신의 제네릭을 사용할 수 있습니다 귀하의 요구 사항에 따라, 여기에 제네릭 사용하지 않은 20시 이후에 전화를 걸려면 다음과 같이하십시오.

Node insertedNode = addAfter(20, 25); 

희망이 도움이됩니다.

관련 문제