2016-01-06 2 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 
    } 

} 

Получение исключения из null указателя в приведенном выше коде. Когда я пытаюсь запустить вышеприведенный код, он дает исключение из нулевого указателя. Пожалуйста, помогите мне с моей ошибкой.Исключительное исключение указателя при обработке Узлы со связанными списками

Ниже реализация LinkList, где определены все методы

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

Возможный дубликат [Что такое Исключение Null Указатель и как его исправить?] (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, где вы не проверять, если этот узел null или нет. Это через ваш 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

Смежные вопросы