我在喜欢的列表中添加元素有一个问题
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" 'display'方法不能显示最后添加的元素。
但是如果我输入:
list.addFirst(2);
list.addLast(1);
将同时显示。有什么问题吗?谢谢。
如果这个列表是双链接的,您不应该在newNode中添加一个引用到它之前/之后的元素吗?
您的display()方法遍历node.next
,但在addFirst()
中您从未设置.next
-因此,如果您多次调用addFirst()
,并且只有该方法,display()
将打印什么?
在addFirst你还必须把newNode.next = f
,现在你只是更新双向关系的一面。由于显示使用了下一个字段,所以它不会像您期望的那样工作。
类似地,在addLast中,您需要添加newNode.previous = l
,但是由于先前字段未在显示方法中使用,因此在执行它时不会出现错误。
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;
}