c++ - 递归反向单链表

标签 c++ recursion

我正在尝试编写一个基本函数来反转递归的单链表。我想知道我是否以正确的方法解决了这个问题?也许有人可以给我一些指示。

 void reverse(Node*& p) {
  if (!p) return;
  Node* rest = p->next;
  if (!rest) return;
  reverse(rest);
  p->next->next = p;
  p->next = NULL;
  p = rest;
}

最佳答案

这不是最有效的方法,但要做到这一点,您可以使用“下一个”指针调用反向方法,直到没有下一个。到达那里后,设置在上一个旁边。从递归返回后,将 next 设置为 previous。查看recursive version here举个例子。来自链接:

Node * reverse( Node * ptr , Node * previous)
{
    Node * temp;
    if(ptr->next == NULL) {
        ptr->next = previous;
        previous->next = NULL;
        return ptr;
    } else {
        temp = reverse(ptr->next, ptr);
        ptr->next = previous;
        return temp;
    }
}
reversedHead = reverse(head, NULL);

关于c++ - 递归反向单链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13061840/

相关文章:

c++ - 多态地使用 vector 与多态地使用数组之间的区别

c - 在循环中使用递归时如何展开?

java - 如何将解决方案从递归方法调用传递到调用方法? (回溯算法)

python - 递归函数的危险

c++ - 在返回的 lambda 中复制省略捕获的局部变量

c++ - 带有initializer_list和size的std::unordered_map构造函数在main中编译,但不在类定义中编译

C++ std::initializer_list 用法

python - 为什么python中的递归这么慢?

递归 purrr::modify_depth() 不适用于参差不齐的列表

c++ - 缺少返回值的函数,运行时的行为