链接列表:使用递归

时间:2016-07-27 08:33:23

标签: c++ recursion linked-list

我想知道,以下两段代码如何将新节点插入到链接列表中?

verison1

version2

在Version1中,有一个prev指针可以将前一个节点挂起到新节点。

但我在版本2中没有看到。在版本2中,先前的链接被破坏(即,它没有链接到新节点),我错过了什么?

1 个答案:

答案 0 :(得分:1)

让我们深入了解您的第2版插入内容:

void RecInsertSorted(Entry*& list, Entry* newOne) {
    if (list == nullptr || newOne->name < list->name) {
        newOne->next = list;
        list = newOne;
    else {
        RecInsertSorted(list->next, newOne);
    }
}

您不需要prev,因为这项工作是通过电话进行的。这是为什么?因为list参数是对指针的引用。

假设我们在第一个和第二个元素之间插入newOne。最后,您希望列表看起来像:

  

element1 - &gt; newOne - &gt;在element2

当满足条件newOne->name < list->name时,list引用element2。但这是对指针的引用,引用引用了element1-&gt; next!因此,当语句list = newOne;运行时,它会相应地更新element1->next,并且您的列表格式正确。

同样,在最后插入newOne时,listnullptr。但同样,它是一个引用,因此newOne->next变为nullptrnewOne成为列表的末尾。

同样,如果必须在第一个元素之前插入newOne,它会更新一些head指针,以便跟踪列表的头部...因此成为列表的第一个元素。