插入到双链表中



我在喜欢的列表中添加元素有一个问题

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

相关内容

  • 没有找到相关文章

最新更新