我在Liked 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);
它将显示两者。 这有什么问题? 感谢。
答案 0 :(得分:4)
如果此列表是双向链接的,那么您是否应该将newNode中的引用添加到之前/之后的元素中?
您的display()方法遍历node.next
,但在addFirst()
中您从未设置.next
- 所以如果您多次调用addFirst()
,并且只调用该方法,那么display()
{1}}打印?
答案 1 :(得分:2)
在addFirst中你还必须放newNode.next = f
,现在你只是更新双向关系的一面。由于显示器使用下一个字段,因此它无法正常工作。
同样,在addLast中你需要添加newNode.previous = l
,但是由于显示方法中没有使用上一个字段,所以当你执行它时它不会出现错误。
答案 2 :(得分:0)
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;
}