我正在努力在链接列表的末尾添加一个项目(这不是家庭作业......只是我自己的练习)。
以下是该计划:
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++;
}
}
}
这是我的Node类:
public class Node {
public int value;
public Node next;
public int getValue(){
return this.value;
}
}
以下是我的想法:
1.我有一个原始/正在进行的列表,以&#34; head开头。&#34;
我想补充一下这个清单
3.要添加它,我需要找到它的结尾。我这样做是通过创建一个名为temp的新节点(它只是原始列表的副本)。
我遍历副本(临时),直到我到达终点
5.一旦我到达终点,我创建一个新节点。
对我而言,这是我的代码停止的地方。现在,在我看来,我需要添加一些代码,说明,&#34;好吧,你有新的节点,你知道它需要去哪里,所以让我们浏览真实的列表然后添加它。&#34;
但我没有那个。根据我的调试器(下图),正确的事情正在发生,但我没有看到将新节点添加到原始列表的魔力。这是怎么回事?
编辑:
我确实看过其他实现(比如here);它看起来非常相似。但是,我仍然无法在没有指定temp(或head.next)的情况下找到原因。我相信我在理论上得到了链接列表。我只是不明白为什么这一点有用。
答案 0 :(得分:1)
您的疑惑是temp
与<{em>不同到head
。不是。
它们都是将引用保存到相同 Node
对象的变量。通过任一变量进行的更改都会反映在它们引用的(相同)对象中。当您向Node
添加temp
时,请将其添加到真实列表中。