我有考试,我正在研究Linked List,但我不明白为什么不使用添加方法list
而使用current
代替它。我试过它它给出了逻辑错误。 Current
是list
的副本,因此他们都应该给出相同的答案。
public class MagazineList
{
private MagazineNode list;
public MagazineList() {
list = null;
}
public void add(Magazine mag) {
MagazineNode node = new MagazineNode(mag);
MagazineNode current;
if(list == null) {
list = node;
} else {
current = list;
while(current.next != null)
current = current.next;
current.next = node;
}
}
public String toString() {
String result = " ";
MagazineNode current = list;
while (current != null) {
result += current.magazine + "\n";
current = current.next;
}
return result;
}
private class MagazineNode
{
public Magazine magazine;
public MagazineNode next;
public MagazineNode(Magazine mag) {
magazine = mag;
next = null;
}
}
}
答案 0 :(得分:2)
list
是列表的负责人。你不想改变它,除非你在头上添加一些东西,你需要更新它。
这就是为什么将节点current
设置为list
(LinkedList的头部)然后只更改当前节点(current = current.next
)的原因。
如果您更改了list
(list = list.next
),则会更改链接列表的头部,并且无法返回。
在add方法中,特别是在遍历节点list
之后,实际上会指向列表的尾部,并且您将无法访问任何其他元素(除非它是双重链接的)。