Ich versuche, Element am Ende einer verknüpften Liste insertAtEnd()
einzufügen. Wenn ich den Code debugge, sehe ich eine node(0,null)
wird standardmäßig am Anfang der Einfügung eingefügt. Ich denke, das verursacht das Problem beim Durchlaufen der Liste. Irgendwelche Vorschläge, wie das zu beheben?LinkedList Insert Last
package com.ds.azim;
public class Node {
//Node has 1. Data Element 2. Next pointer
public int data;
public Node next;
//empty constructor
public Node(){
//
}
public Node(int data){
this.data= data;
this.next = null;
}
public Node(int data, Node next){
this.data = data;
this.next = next;
}
}
//*************************************//
package com.ds.azim;
public class SingleLinkedList {
//Single Linked list has a head tail and has a length
public Node head;
public Node tail;
public int length;
//constructor
public SingleLinkedList(){
head = new Node();
length = 0;
}
public void insertAtFirst(int data){
head = new Node(data,head);
}
public void insertAtEnd(int data){
Node curr = head;
if(curr==null){
insertAtFirst(data);
}else{
while(curr.next!=null){
curr = curr.next;
}
curr.next = new Node(data,null);
}
}
public void show(){
Node curr = head;
while(curr.next!=null){
//do something
System.out.print(curr.data+",");
curr = curr.next;
}
}
public static void main(String[] args){
SingleLinkedList sll = new SingleLinkedList();
sll.insertAtFirst(12);
sll.insertAtFirst(123);
sll.insertAtFirst(890);
sll.insertAtEnd(234);
sll.show();
}
}
Sie haben eine 'tail'-Variable, die vermutlich auf den letzten Knoten in der Liste zeigen sollte (obwohl Ihr Code sie momentan nicht verwendet). Das Einfügen am Ende sollte nur eine Frage von "tail.next = new Node (data)" sein. – sprinter
Das erfordert, dass 'tail' aktualisiert wird, wenn sich die Struktur ändert, und dass" empty "korrekt behandelt wird. –
@sprinter danke für die Antwort. Ich habe den Schwanz erklärt, aber nie benutzt. Wie kann ich das mit dem Kopfzeiger machen? –