【发布时间】:2014-02-02 13:16:16
【问题描述】:
我在课堂上有一个 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);
}
}
简单来说,当列表为空时,该方法将员工完美地添加到节点中,即使我在列表中添加第二个员工,也可以;但是当我再添加并尝试检索它时,我会得到不正确的结果。
基本上,如果列表被填充,则节点 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在一起
代码有什么问题? 请帮忙。高度评价
【问题讨论】:
-
除了遵循给定的代码之外,无法找出问题所在。 if(isEmpty() == true) { setHead(n);设置尾(n); n.setPrevious(null); n.setNext(null); // n.setNext(n); }
-
你认为那里有什么不正确的地方?谢谢
-
我的意思是说......你的代码看起来很好,我可以从给定的代码中找出唯一合乎逻辑的事情是当 isEmpty() 为真时 n.setNext() 应该有空值而不是 n。解决这个问题会很困难。最好设置断点并在调试模式下运行您的应用程序,看看节点在哪里被错误分配/放置。
-
你能贴出这里使用的每种方法的代码吗? getNext, stNxt, getPrevious, setPrevious, ...
-
由于某种原因,我无法在此处发布所有内容。 dropbox.com/sh/tsxa1sjd72dm4gx/KBlF1b-qtA
标签: java linked-list nodes doubly-linked-list