2017-01-15 3 views
1

Wir haben mit verknüpften Liste und Knoten in der Klasse begonnen und ich glaube, ich habe verstanden, wie sie funktionieren. Aber an einer Stelle, an der wir den Knoten zur verknüpften Liste hinzufügen müssen, habe ich einige Probleme, damit er funktioniert. Der Fehler tritt in der Methode "append" auf. Meine IDE sagt mir nicht viel über das Problem.Versuchen, Knoten zu verketteten Liste hinzuzufügen

Meine Klasse LinkedList:

public class LinkedList { 
    public Node head = null; 

    public void insert(Node n) { 
     n.next = head; 
     head = n; 
    } 

    public Node search(int nummer) { 
     Node current = head; 

     while (current != null) { 
      if (current.element == nummer) 
       return current; 
      current = current.next; 
     } 
     return null; 
    } 

    public int count() { 
     int c = 0; 

     for (Node n = head; n != null; n = n.next) { 
      c++; 
     } 
     return c; 
    } 

    public void append(Node n) { 
     if (head == null){ 
      head = new Node(n, null); 
     } 
     else { 
      Node p = head; 
      while (p.a != null){ 
       p = (Node) p.a; 
      } 
     p.a = new Node(n, null);} 
    }  
} 

Meine Node-Klasse:

public class Node { 
    public int element = 0; 
    public Node next = null; 
    Object a; 

    public Node(int e, Node n) { 
    this.element = e; 
    this.next = n; 
    } 

    public Node(int e) { 
    this.element = e; 
    } 

} 
+0

Welche Probleme haben Sie? Was passiert, wenn Sie Ihren Code ausführen? Wie unterscheidet sich das Ergebnis von dem, was Sie wollen? An diesem Punkt Ihrer Programmierkarriere ist es sehr wichtig zu lernen, wie Sie Ihren eigenen Code debuggen können. Sie sollten einen Debugger verwenden oder 'System.out.println()' Anweisungen hinzufügen, um zu sehen, was Ihr Code tatsächlich macht. Ich schlage auch vor, dass Sie Bilder zeichnen, um zu visualisieren, was Sie tun. Verwenden Sie ein Kästchen oder einen Kreis, um einen Knoten darzustellen, und Pfeile, um den nächsten Verweis zwischen Knoten darzustellen. –

Antwort

0

Sie behandeln das Feld a, als ob es der Zeiger auf den nächsten Knoten in der Liste standen. Es ist nicht, es ist tatsächlich die Daten in jedem Listenknoten enthalten. Stattdessen ändern Ihre append() Methode next zu verwenden:

public void append(Node n) { 
    if (head == null) { 
     head = new Node(n, null); 
    } 
    else { 
     Node p = head; 
     // walk down the list from the head until reaching the end 
     while (p.next != null) { 
      p = (Node) p.next; 
     } 
     // then append the new Node to the end of the list 
     p.next = n; 
    } 
} 

Beachten Sie, dass im Idealfall sollten Sie Getter und Setter-Methoden für Ihre Node Klasse. Ich könnte so etwas wie dies vorschlagen:

public class Node { 
    private int element = 0; // no idea what this is for 
    private Node next = null; 
    private Object a; 

    public Node(int e, Node n) { 
     this.element = e; 
     this.next = n; 
    } 

    public Node(int e) { 
     this.element = e; 
    } 

    public void setNext(Node next) { 
     this.next = next; 
    } 

    public Node getNext() { 
     return next; 
    } 

    public void setA(Object a) { 
     this.a = a; 
    } 

    public Object getA() { 
     return a; 
    } 
} 

Mit dieser aktualisierten Definiton von Node Ihre append() Methode würde:

public void append(Node n) { 
    if (head == null) { 
     head = new Node(n, null); 
    } 
    else { 
     Node p = head; 
     // walk down the list from the head until reaching the end 
     while (p.getNext() != null) { 
      p = p.getNext(); 
     } 
     // then append the new Node to the end of the list 
     p.setNext(n); 
    } 
} 
+0

Vielen Dank für Ihre aktualisierte Version, aber das Problem tritt immer noch auf. n in "new Node (n, null), sagt jetzt" Node kann nicht in int konvertiert werden. –

+0

Das ist alles Code, der existiert und ich habe den Fehler so oft gesucht. –

+0

Fehler gefunden, sorry. Verwenden Sie einfach 'p .setNext (n) 'und fügt den neuen' Node' direkt an. –

Verwandte Themen