[英]Insertion into Doubly linked list
我在喜欢列表中添加元素时遇到问题
public class LinkedList {
public Node first;
public Node last;
public LinkedList() {
first = null;
last = null;
}
public void addFirst(Student student) {
Node f = first;
Node newNode = new Node(student);
first = newNode;
if (f == null) last = newNode;
else f.previous = newNode;
}
public void addLast(Student student) {
Node l = last;
Node newNode = new Node(student);
last = newNode;
if (l == null) first = newNode;
else {
l.next = newNode;
}
}
public void display() {
Node current = first;
while (current != null) {
//print...
current = current.next;
}
}
我的问题是当我跑步时:
list.addLast(1);
list.addFirst(2);
list.display();
它只显示“ 2”“显示”方法,看不到最后添加的元素。
但是如果我运行:
list.addFirst(2);
list.addLast(1);
它将同时显示。 怎么了 谢谢。
如果此列表是双向链接,您是否不应该在newNode中添加对其之前/之后的元素的引用?
您的显示()方法遍历node.next
但addFirst()
你从来没有设置.next
-因此,如果调用addFirst()
几次,只有这个方法,你会display()
打印?
在addFirst中,您还必须放入newNode.next = f
,现在您只是在更新双向关系的一侧。 并且由于显示使用下一个字段,因此它无法按预期工作。
同样,在addLast中,您需要添加newNode.previous = l
,但是由于display方法中未使用前一个字段,因此在执行该字段时不会出现错误。
public void addFirst(Student student) {
Node f = first;
Node newNode = new Node(student);
newNode.next = f; // this was missing
first = newNode;
if (f == null)
last = newNode;
else
f.previous = newNode;
}
public void addLast(Student student) {
Node l = last;
Node newNode = new Node(student);
newNode.previous = l; // this was missing
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.