我正在用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;
}
}
谢谢
最佳答案
您的方法名称引起了一些混乱,因为addBack
被添加到列表的开始(并且似乎正确地做到了),您显然打算将addFront
添加到列表的末尾。
实际上,您的addFront
代码始终将新节点添加为第一个和唯一元素或第二个元素,以替换其中的任何内容。
要在末尾添加,您需要遍历列表以找到最后一个元素(即带有next == null
的元素),并将新项设置为下一个,以替换null
。
或者可能是代码片段中的结果,您打算将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;
}
关于java - 链表添加了结合前后位置的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19611800/