我正在编写一个简单的链表实现和相应的Trigger类,如下所示:
public class Trigger {
public static void main(String[] args) {
LinkedList lin = new LinkedList();
lin.add(3);
lin.add(4);
lin.add(5);
lin.display();
}
}
public class LinkedList {
Item startItem;
LinkedList() {
startItem = new Item();
}
public void add(Integer newValue) {
if(startItem.value == null) {
startItem.value = newValue;
return;
}
Item tempItem = new Item();
tempItem.value = newValue;
while(startItem.next != null) {
startItem = startItem.next;
}
startItem.next = tempItem;
}
public void display() {
while(true) {
System.out.println("\t"+ startItem.value);
if(startItem.next == null) {
break;
} else {
startItem = startItem.next;
}
}
}
class Item {
Integer value;
Item next;
Item() {
this.value = null;
this.next = null;
}
}
}
问题是,只保留最后两个添加内容并丢弃之前的添加内容。这是(当然)因为我不断更改引用startItem指向的对象。我的问题是,给定这样的递归结构,什么是正确的循环机制?我知道在链表中,没有必要到列表的末尾来执行添加。链表结构用作上下文来询问循环结构的循环。感谢。
答案 0 :(得分:2)
您的基本结构是正确的。您只需在开始循环之前添加一行...
Item currentItem = startItem;
while(currentItem.next != null) {
currentItem = currentItem.next;
}
首次检查字段startItem
的唯一时间是第一次检查其值是否为null
。它的引用永远不应该被改变,因为它应该总是指向结构的开始。考虑让它final
强制执行此操作。