我正在將項目添加到鏈接列表的末尾(這不是作業......只是我自己的練習)。爲什麼LinkedList addLast實現工作?
下面是程序:
public class CustomLinkedList {
private static Node head = null;
private int size = 0;
public static void main(String[] args) {
CustomLinkedList myList = new CustomLinkedList();
myList.add(5);
myList.add(9);
myList.add(3);
System.out.println("List Size: " + myList.size);
myList.print();
}
private int size() {
return this.size;
}
private void print() {
Node temp = head;
for (int i=0; i<=size-1;i++){
System.out.print(temp.value + " ");
temp = temp.next;
}
System.out.println();
}
private void add(int value) {
if (head == null) {
head = new Node();
head.value = value;
head.next = null;
size++;
} else {
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = new Node();
(temp.next).value = value;
size++;
}
}
}
這裏是我的節點類:
public class Node {
public int value;
public Node next;
public int getValue(){
return this.value;
}
}
這裏是什麼,我認爲正在發生的事情:
1.我有一個原始/正在進行名單從「頭」開始。
2.我想添加到該列表。
3.要添加到它,我需要找到它的結尾。我通過創建一個名爲temp的新節點(它只是原始列表的一個副本)來實現這一點。
4.我遍歷副本(temp)直到結束。
5.一旦我達到最後,我創建一個新的節點。
對我來說,這是我的代碼停止的地方。現在,在我看來,我需要添加一些代碼,說:「好吧,你有新的節點,你知道它需要去哪裏,所以讓我們通過真正的列表並添加它。」
但我沒有。根據我的調試器(下圖),正確的事情正在發生,但我沒有看到將新節點添加到原始列表的魔力。這是如何工作的?
編輯:
我也看其他實現(像一個here);它看起來非常相似。然而,我仍然無法找到爲什麼它沒有分配臨時頭(或head.next)的作品。我相信理論上理解鏈接列表。我只是不明白爲什麼這個位有效。
什麼行「head = temp」?代碼很好,很有意義,儘管它可以顯着減少和重構。 – Bohemian
除了@Bohemian鑑於C++代碼正在爲您的JAVA代碼添加相反的順序值。 –
@Bohemian我試着編輯我的問題。我描述了我的代碼中發生了什麼,以及發生了什麼。希望這能讓我的問題更清楚。 – JustBlossom