2

我在喜欢列表中添加元素时遇到问题

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);

它将显示两者。它有什么问题?谢谢。

4

3 回答 3

4

如果这个列表是双向链接的,你不应该在 newNode 中添加对它之前/之后的元素的引用吗?

您的 display() 方法会遍历node.next,但addFirst()您从未设置过.next- 因此,如果您addFirst()多次调用,并且仅调用该方法,将display()打印什么?

于 2011-10-25T13:50:48.517 回答
2

在 addFirst 你还必须放newNode.next = f,现在你只是更新双向关系的一侧。而且由于显示使用下一个字段,因此它不能按您的预期工作。

同样,在 addLast 中你需要添加 add newNode.previous = l,但是由于前一个字段没有在 display 方法中使用,所以当你执行它时它不会出现错误。

于 2011-10-25T13:53:41.377 回答
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;
}
于 2011-10-25T13:53:17.467 回答