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



我的问题是,当我使用这个方法,并在添加一些Resepts(Integer)后打印出列表时,列表的顺序是0,3,2,1,而不是我想要的3,2,1,0。

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++;
    }
}

你只是把它们连接错了。

假设新的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;

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]

它不能正常工作,因为你的else子句不是插入新节点,而是做其他事情。
再读一遍你的代码,看看哪里出错了…

指出:处理空列表和非空列表没有区别…

相关内容

  • 没有找到相关文章

最新更新