我正在编写Java链接列表的实现。我有两个方法,一个将元素放在列表前面:
public void addFront(int n){
Node temp=new Node(n);
if (llist==null){
first=temp;
}
else{
llist.next=temp;
}
llist=temp;
}
因此,如果我在列表中添加元素,如:
l1.addFront(1)
l1.addFront(2)
l1.addFront(3)
将打印:1,2和3
现在我有其他方法将元素放在后面,如下所示:
public void addBack(int n){
Node temp=new Node(n);
temp.next=llist;
llist=temp;
first=temp;
}
所以如果我添加像:
这样的元素l1.addBack(4)
l1.addBack(5)
l1.addBack(6)
它将打印6,5,4;一切都很好,直到这里;问题是当我想用最后一个列表做以下行时:
l1.addFront(9)
它只会打印9和6,但其他数字会丢失,为什么会这样?
我的印刷方法是:public void print(){
Node curr=first;
while(curr!=null){
System.out.println(curr.e);
curr=curr.next;
}
}
感谢
答案 0 :(得分:1)
你的方法名称引起了一些混乱,因为addBack
正在添加到列表的开头(并且似乎正确地这样做了),而你显然打算将addFront
添加到最后列表。
addFront
的代码实际上总是将新节点添加为第一个和唯一的元素,或者作为第二个元素添加,替换那里的任何内容。
要在最后添加,您需要遍历列表以查找最后一个元素(即具有next == null
的元素)并将新项目设置为下一个,替换null
。< / p>
或者因为它可能来自您的代码片段,您打算将llist
作为列表中的最后一个元素,您需要将其保持在该状态,并使用它而不是如上所述遍历。
假设您确实希望方法按上述方式行事(虽然看起来很落后),并假设您确实希望保持llist
字段保留最后一个元素以便您不要不需要遍历列表以便添加到最后,以下代码应该这样做。
public void addFront(int n){
Node temp=new Node(n);
if (llist==null){
first=temp;
}
else{
llist.next=temp;
}
llist=temp;
}
public void addBack(int n){
Node temp=new Node(n);
temp.next=first;
first=temp;
if (llist == null)
llist = first;
}