插入双链表

时间:2011-10-25 13:47:59

标签: java linked-list doubly-linked-list

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

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

3 个答案:

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