【问题标题】:Singly Linked List Reversal using Double pointer and Recursion使用双指针和递归的单链表反转
【发布时间】:2021-09-25 21:52:55
【问题描述】:

我尝试使用指向在以下函数中用作参数的头节点的指针来反转链表:

void reverseLLRec(Node** start) {
    Node* curr;
    // Empty list
    if (*start == NULL) {
        return;
    }
    curr = *start;
    if (curr->link == NULL) {
        *start = curr;
        return;
    }
    
    reverseLLRec(&(curr->link));
    curr->link->link = curr;
    curr->link = NULL;
}

我得到以下输出 -

似乎*start 指针没有被修改为指向新的头。

我在这里做错了什么?

【问题讨论】:

    标签: c++ recursion data-structures linked-list


    【解决方案1】:

    因为您通过将curr->link 的地址传递给递归调用来更改curr->link,所以下次使用curr->link 将不再引用您想要的节点。

    你不应该让递归调用改变curr->link。另一方面,您应该更改*start,因为它必须引用新的头部(在反转之后)。所以将那个地址传递给递归调用。

    所以替换这一行:

    reverseLLRec(&(curr->link));
    

    这两行:

    *start = curr->link;
    reverseLLRec(start);
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2021-04-15
      • 2018-11-16
      • 2020-12-20
      • 2016-08-01
      • 2011-01-05
      • 2018-12-03
      • 1970-01-01
      • 2020-07-22
      相关资源
      最近更新 更多