我的问题是,当我使用这个方法,并在添加som Resepts(整数)后打印出列表,列表的顺序是0,3,2,1而不是3,2,1,0 as我想要它。
public void addFirst(Resept nyResept) {
Node node = new Node(nyResept);
if (topNode == null) {
topNode = node;
bottomNode = node;
node.next = null;
amount++;
} else {
node.next = topNode.next;
topNode.next = node;
amount++;
}
}
答案 0 :(得分:1)
您只是错误地链接它们。
假设您的新node
是新的顶级节点,则不应指向现有的topNode.next
,而应指向topNode itself.
假设这是您的原始列表:
+------+ +------+ +-------+
|node 2+------->|node 1+------>| node 0|
+------+ +------+ +-------+
如果要插入新节点,为什么要将其指向node 1
而不是node 2
?
+------+ +------+ +-------+
+----+>|node 2+------->|node 1+------>| node 0|
| +------+ +------+ +-------+
|
|
|
| +-----------+
++-++| new node |
+-----------+
这意味着你应该
node.next = topnode;
答案 1 :(得分:1)
Daniel B的回答已经告诉你应该做什么。只是为了感兴趣,如果你的列表以3个节点开头,这就是实际做的事情:
原始列表:
topNode
v
[node 1]->[node 2]->[node 3]
在node.next = topNode.next;
之后,它看起来像这样:
topNode
v
[node 1]-------------+->[node 2]->[node 3]
|
[node 4]-+
^
node
然后在topNode.next = node;
之后看起来像这样:
topNode
v
[node 1]-+ +->[node 2]->[node 3]
| |
+->[node 4]-+
^
node
或简化,像这样:
topNode node
v v
[node 1]->[node 4]->[node 2]->[node 3]
答案 2 :(得分:0)
它无法正常工作,因为您的else子句 NOT 插入新节点但执行其他操作。
再次阅读您的代码,看看有什么问题......
注意: 处理空列表和非空列表没有区别......