我的类里面有一项 Java 作业。它是关于Employees的,所以有三个类,Employee、EmployeeList和Nodes。我需要从中创建一个双链表。链表是我们自定义的一个类,不是Java提供的。
现在我陷入了 add(Employee 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 也没有问题;但是当我再添加并尝试检索它时,我最终得到了错误的结果。
基本上,如果列表已填充,则节点 c 会被分配到列表的尾部。 “尾部或 c”下一个为空,但现在是节点 n。节点n,由于是tail之后的下一个元素,所以节点n的前一个链接是节点c,tail更新为节点n。
我在这里做错了什么? 如果我尝试
list.getHead().getNext().getNext().getPrevious().getEmployee().getName());
其中列表 = [a,b,c]; 结果是 c,它应该是 b。
也就是说;
head = a, a.getNext().getNext() == c;
c.getPrevious() == b;
但我仍然和c在一起
代码中有什么问题? 请帮忙。高度评价
最佳答案
您的 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
其他列表方法之一未正确更新节点的下一个/上一个变量。
关于java - 如何在双链表的末尾添加节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21114229/