addFirst方法在自定义linkedList中无法正常工作

时间:2014-03-17 13:57:17

标签: java linked-list

我的问题是,当我使用这个方法,并在添加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++;
    }
}

3 个答案:

答案 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 插入新节点但执行其他操作。
再次阅读您的代码,看看有什么问题......

注意: 处理空列表和非空列表没有区别......