好的,所以我在玩Java中的鏈表。我試圖理解爲什麼我的deleteNode方法不會刪除頭節點。它適用於其他節點。爲什麼我的鏈表的頭節點沒有被刪除?
這裏的方法
Node deleteNode(Node head, int d){
Node n = head;
if(n.data == d){
return head.next;
}
while(n.next != null){
if(n.next.data == d){
n.next = n.next.next;
return head;
}
n = n.next;
}
return head;
}
樣品輸入:
Node ll = new Node(1);
ll.appendToTail(2);
ll.appendToTail(3);
當我打電話給我的方法
ll.deleteNode(ll, 2);
,然後打印當前的節點,我得到的1正確的輸出 - > 3,但是當我用這個方法刪除初始節點或者頭部時
ll.deleteNode(ll, 1);
我得到的輸出1-> 2-> 3,但我期望2-> 3,其中2成爲新的頭。下面是整個實施只是櫃面
public class Node {
Node next = null;
int data;
public Node(int d){
data = d;
}
void appendToTail(int d){
Node end = new Node(d); //Item to append to the end
Node n = this; //To access Class object next
while(n.next != null){
n = n.next;
}
n.next = end;
}
Node deleteNode(Node head, int d){
Node n = head;
if(n.data == d){
return head.next;
}
while(n.next != null){
if(n.next.data == d){
n.next = n.next.next;
return head;
}
n = n.next;
}
return head;
}
void printNodes(){
Node n = this;
while(n.next != null){
System.out.println(n.data);
n = n.next;
}
System.out.println(n.data); //print out the last node
}
//For fun, to simulate how python print's a list
// printed example [1, 2, 3]
void listNodes(){
Node n = this;
StringBuilder sb = new StringBuilder();
sb.append("[");
while(n.next != null){
sb.append(n.data).append(", ");
n = n.next;
}
sb.append(n.data);
sb.append("]");
System.out.println(sb.toString());
}
}
謝謝,這正是我一直在尋找的。 – reticentroot