2017-09-14 4 views
1
System.out.println("insert after specified data node"); 
System.out.println("enter data"); 
int x = sc.nextInt(); 
Node s4 = head; 
try 
{ 
    while(s4.data != x) 
    { 
     s4 = s4.next; 
    } 
} 
catch(NullPointerException e) 
{ 
    e.printStackTrace(); 
} 

System.out.println("hi"); 

Node specifiedNode = new Node(x); 
//s4.next = specifiedNode; 

try 
{ 
    specifiedNode.next = s4.next; 
    s4.next = specifiedNode; 

} 
catch(NullPointerException e) 
{ 
    e.printStackTrace(); 
} 

System.out.println("output after specified insertion"); 
Node s5 = head; 
while(s5!=null) 
{ 
    System.out.println(s5.data); 
    s5 = s5.next; 
} 

}einzige verketteten Liste java

Dies ist das Beispielprogramm, um Daten nach einem bestimmten Knoten in einzelner verkettete Liste einzufügen. In dem obigen Programm ist meine Frage, warum Null-Zeiger-Ausnahme bei den folgenden Aussagen geschieht:

specifiedNode.next = s4.next; 
s4.next = specifiedNode; 
+0

Bitte versuchen Sie, ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und zeigen Sie uns. –

+0

Sie müssen schreiben und zeichnen, was Sie erreichen möchten. Diese Implementierung ist weit weg. – Sedrick

+0

'while (s4.data! = X) s4 = s4.next;' Also, wenn Sie nicht 'x' in dieser Liste haben, schlägt es fehl ... Sie sollten NPE nicht fangen, sondern sie verwalten. Für das "Warum?" _, Haben Sie nur den Wert überprüft? – AxelH

Antwort

0

warum halten Sie die .next der s4 Instanz zugreifen? Der Weg, dies zu tun ist, die s4.next in einem Attribut für einmal zu speichern und es in Ihrem gesamten Programm zu verwenden, da Sie bei jedem Zugriff auf die next() den nächsten Datensatz aufrufen und wahrscheinlich einer von ihnen null ist ;

0

Um eine NullPointerException zu vermeiden, stellen Sie sicher, dass Sie immer s4 nicht als null markieren.

Node s4 = head;  // Head initially is null (empty list). 
while (s4 != null) { // End reached? 
    if (s4.data == x) { 
     // Wow, found x. 
     break; // Jump out of the loop. 
    } 

    // Go to next node. 
    s4 = s4.next; // s4 could become null. 
}