链表 - 无法弄清楚为什么此插入 before 方法会导致链接列表扩展



当我不使用"insertBefore"方法时,它只是像它应该的那样正常打印出链表。但是当我尝试使用 insertBefore 方法时,它确实适用于第一部分,但随后它会继续打印链接列表,就好像它永远持续下去一样,

前任:

在打印出"我的测试::::
头 ->3 -> 2 -> 1 -> 4 -> |||"

但是当我使用insertBefore并打印出来时,它会打印出来

头 ->3 -> 4 -> 2 -> 1 -> 4 -> 2 -> 1 -> 4 -> 2 -> 1 -> 4 -> 2 -> 1 -> 4 -> 2 -> 1 -> 4 -> 它一直持续下去,永远持续下去

这是插入之前的方法

private boolean insertBefore(Node aNode, Node beforeNode)
{
    Node currentNode;
    Node prevNode;
    //aNode= new Node();
    currentNode = this.getHead();
    while(currentNode!=null && currentNode.getNext()!=aNode)
    {
        if(currentNode == beforeNode)
            {
                prevNode = this.getPrevious(beforeNode);
                prevNode.setNext(aNode);
                aNode.setNext(beforeNode);
                //aNode.setNext(currentNode);
                return true;
            }
        currentNode = currentNode.getNext();
    }
    currentNode.setNext(beforeNode);
    return false;
}

insertBefore 方法确实完成了它的工作,但它使链接列表永远继续下去,我想知道为什么

您需要

添加aNode.setNext(currentNode)

你正在操作看起来像一个双向链表的东西(因为你有getPrevious)

您当前的列表是:1 <-> 2 <-> 3 <-> 4

您想在 3 之前添加"a":

  • 所以你需要找到节点2和3
  • 更新 2.在 a 旁边,a.在 2 之前
  • 更新 a.在 3 和 3 旁边

    我在这里没有看到所有这些更新......只有PrevNode.setNext(aNode)。

    注意(这不是一个双向链表,那么你只缺少 1 组而不是 3 组,但实际上没有必要对列表进行两次完整的第二次扫描只是为了找到前一个节点)。

  • 相关内容

    最新更新