2016-11-27 4 views
1

Einfach verknüpfte Liste.Java verkettete Liste. Dieses Programm druckt nicht 8. Warum?

  1. erstelle ich Knoten
  2. Hinzufügen neuer Knoten

Umsetzung:

//create node 
class Node { 
    int data; 
    Node next; 

    Node(int data) { 
    this.data = data; 
    next = null; 
    } 
} 
public class LinkedList { 

    //Add new node 
    public static void add(Node root, int data){ 
    Node temp; 
    while (root != null) { 
     root = root.next; 
    } 
    temp = new Node(data); 
    root = temp; 
    } 
    //print node 
    public static void print(Node root){ 
    while (root != null) { 
     System.out.println(root.data); 
     root = root.next; 
    } 
    } 

    public static void main(String[] args) { 
    Node root ; 
    Node iter; 
    root = new Node(7); 
    iter = root; 
    add(iter, 8); 
    print(iter); 
    } 

} 

Ich arbeite Datenstrukturen. Ich möchte eine Liste verknüpfen, aber das Programm schlägt fehl. Dieses Programm druckt nicht 8. Warum?

Wo mache ich Fehler?

Antwort

2
while(root!=null){ 
    root=root.next; 
} 
temp=new Node(data); 
root=temp; 

hier: root ist zu einem Zeitpunkt NULL. Nach der Schleife weisen Sie dem letzten Element der Kette kein nächstes Element zu. Sie führen in Ihrer Kette nichts aus, da root auf einen NULL Wert zeigt und sich nicht auf ein Element Ihrer Kette bezieht.
Außerdem hat es keinen Sinn, einem Methodenparameter einen Wert zuzuweisen, da er beim Beenden der Methode nicht berücksichtigt wird.

Wenn Sie den Knoten am Ende der Knotenkette hinzufügen möchten, sollten Sie den Code durch ersetzen:

while(root.next !=null){ 
    root=root.next; 
} 
temp=new Node(data); 
root.next=temp; 

Sie mit aussagekräftigeren Namen schreiben konnte:

Node lastElement = root; 
while(lastElement.next !=null){ 
    lastElement=lastElement.next; 
} 
temp=new Node(data); 
lastElement.next=temp; 

Wie auch immer, Eine einfachere Lösung wäre ein Feld in Ihrer Klasse, das den letzten Knoten der Kette speichert. Das Iterieren über alle Elemente zum Hinzufügen eines Elements am Ende ist nicht sehr effizient.

+0

danke. funktioniert :) – myvalley

+0

Großartig :) Wenn meine Antwort Ihr Problem angesprochen hat, sollten Sie die Antwort als akzeptiert markieren. – davidxxx

Verwandte Themen