如何将NODE添加到双链表的末尾?

时间:2014-01-14 13:00:52

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

我在课堂上有一个Java作业。它是关于Employees的,因此有三个类,Employee,EmployeeList和Nodes。我需要制作一个双链表。链表是我们制作的自定义类,而不是Java提供的类。

现在我陷入了添加(员工e)方法。该方法输入一个Employee对象的参数,并且需要添加到列表的末尾。

这是代码

public void add(Employee emp) {
    Node n = new Node(emp, null , null);
    if(isEmpty() == true) {
        setHead(n);
        setTail(n);
        n.setPrevious(null);
        n.setNext(n);
    }else {
        Node c = getTail();
        c.setNext(n);
        n.setPrevious(c);
        setTail(n);
    }
}

简单来说,当列表为空时,该方法可以完美地将Employee添加到Node中,即使我将第二个Employee添加到列表中也是如此;但是当我再添加,并尝试检索它时,我的结果不正确。

基本上,如果填充了列表,则为Node c分配List的尾部。 “尾部或c”接下来是null,但现在是Node n。节点n,因为是尾部之后的下一个元素,节点n的前一个链接是节点c,尾部更新为节点n。

我在这里做错了什么? 如果我尝试

list.getHead().getNext().getNext().getPrevious().getEmployee().getName());

其中list = [a,b,c]; 结果是c,它应该是b。

是的;

head = a, a.getNext().getNext() == c;
c.getPrevious() == b;

但我仍留在c

代码有什么问题? 请帮忙。高度赞赏

1 个答案:

答案 0 :(得分:0)

您的add方法没有任何问题,如以下代码所示:

public class Q21114229 {

public static void main(String[] args) {

    DLList<Employee> l = new DLList<Employee>();
    l.add(new Employee("a"));
    l.add(new Employee("b"));
    l.add(new Employee("c"));
    System.out.println("Employee b test: " + l.getHead().getNext().getNext().getPrevious().get().getName());
}

static class Node<T> {

    private Node<T> next;
    private Node<T> previous;
    private T value;
    public Node(T value) { this.value = value; }
    public T get() { return value; }
    public Node<T> getNext() { return next; }
    public void setNext(Node<T> next) { this.next = next; }
    public Node<T> getPrevious() { return previous; }
    public void setPrevious(Node<T> previous) { this.previous = previous; }
}

static class DLList<T> {

    private Node<T> head;
    private Node<T> tail;
    public Node<T> getHead() { return head; }
    public Node<T> getTail() { return tail; }
    public boolean isEmpty() { return (head == null); }

    public void add(T value) {
        Node<T> n = new Node<T>(value);
        if (isEmpty()) {
            head = tail = n;
        } else {
            tail.setNext(n);
            n.setPrevious(tail);
            tail = n;
        }
    }

}

static class Employee {

    private String name;
    public Employee(String name) { this.name = name; }
    public String getName() { return name; }
}

}

输出:

Employee b test: b

其他一个列表方法没有正确更新Node的下一个/上一个变量。