2016-01-06 76 views
0
package LinkList2; 
//import java.util.*; 


public class Duplicates { 

    public static void removeDuplicates(LinkedListNode head) 
    { 
     LinkedListNode current = head; 

     while(current!= null && current.next!= null) 
     { 
      LinkedListNode curr = current; 

      while(curr!=null) 
      { 
       if(curr.next.data==current.data) //Getting error at this line 
        curr.next = curr.next.next; 

       else 
        curr = curr.next; 
      } 

      current = current.next; 
     } 
    } 


    public static void main(String args[]) 
    { 
     LinkedListNode first = new LinkedListNode(0,null,null); 
     LinkedListNode head = first; 
     LinkedListNode second = first; 


     for(int i=1; i< 8; i++) 
     { 
      second = new LinkedListNode(i%2, null, null); 
      first.setNext(second); 
      second.setPrevious(first); 
     } 

     System.out.println(head.printForward()); 
     removeDuplicates(head);// Getting error at this line 
    } 

} 

上述代碼中出現空指針異常。當我嘗試運行上面的代碼時,它會給出空指針異常。 請幫我解決我的錯誤。處理鏈接列表節點時出現空指針異常

下面是鏈表的實現中定義的所有方法

class LinkedListNode { 
    public LinkedListNode next; 
    public LinkedListNode prev; 
    public LinkedListNode last; 
    public int data; 
    public LinkedListNode(int d, LinkedListNode n, LinkedListNode p) { 
     data = d; 
     setNext(n); 
     setPrevious(p); 
    } 

    public void setNext(LinkedListNode n) { 
     next = n; 
     if (this == last) { 
      last = n; 
     } 
     if (n != null && n.prev != this) { 
      n.setPrevious(this); 
     } 
    } 

    public void setPrevious(LinkedListNode p) { 
     prev = p; 
     if (p != null && p.next != this) { 
      p.setNext(this); 
     } 
    } 

    public String printForward() { 
     if (next != null) { 
      return data + "->" + next.printForward(); 
     } else { 
      return ((Integer) data).toString(); 
     } 
    } 

    public LinkedListNode clone() { 
     LinkedListNode next2 = null; 
     if (next != null) { 
      next2 = next.clone(); 
     } 
     LinkedListNode head2 = new LinkedListNode(data, next2, null); 
     return head2; 
    } 
} 
+1

可能重複[什麼是空指針異常,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – jhamon

回答

1

你得到一個異常的,只是因爲下列條件:

while(curr != null) 

while(curr != null && curr.next != null)更換這種方式,你可以檢查是否有下一個元素。

希望這會有所幫助。

1

的問題是,在這裏:

while(curr != null) 
{ 
    if(curr.next.data==current.data) //Getting error at this line 
     curr.next = curr.next.next; 
    else 
     curr = curr.next; 
} 

您正在訪問的curr.next.data,你不檢查,如果該節點或者不是。這通過你的NullPointerException

要解決您的問題,請檢查while循環,如果.next也不爲空。

while(curr != null && curr.next != null) 
{ 
    if(curr.next.data==current.data) //Getting error at this line 
     curr.next = curr.next.next; 
    else 
     curr = curr.next; 
} 

換句話說,你不檢查你的下一個節點是否實際上是鏈表的末尾(即空)。如果你需要在你的程序邏輯中分別處理這個,那麼你應該從while循環中移除檢查,並以不同的方式執行這個檢查。

+0

謝謝你的幫助。 – Techiee