当前位置: 首页 > 知识库问答 >
问题:

使用递归反向链表

卞俊贤
2023-03-14

还缺少的是将最后一个节点的next赋值为NULL。

在任何世界里,像这样的东西会起作用吗?它给出了一个运行时/分段错误。

struct node {
    int data;
    node *next;
};

class LinkedList{
    node *head = nullptr;
public:
    node *reverse(node *head){
        if(head->next != nullptr){
            reverse(head->next)->next = head;
        }
        else{
            this->head = head;
        }
        return head;
    }
};

共有1个答案

曹景铄
2023-03-14

注意,您忽略了head是nullptr本身的情况。此外,您不能只返回head······您需要返回反向列表的头部。

试试这个:

node* reverse_list(node* head) {
    if (head == nullptr or head->next == nullptr) { return head; }
    auto tail = head->next;
    auto reversed_tail = reverse_list(tail);
    // tail now points to the _last_ node in reversed_tail,
    // so tail->next must be null; tail can't be null itself        
    tail->next = head; 
    head->next = nullptr;
    return reversed_tail;
}

(未测试……)

 类似资料:
  • 我试图以相反的顺序打印一个链表,但实际上没有使用递归进行反转,但我的输出结果非常奇怪。看起来我的代码基本上选择了第一个节点,并在打印完链表的其余部分(按原始顺序)后将其打印出来。我所写的代码(据我所知)是正确的,并且与internet上解决此问题的代码相匹配。 这是我的代码: 以下是节点类: 这是我给出的输入,然后是输出: 这里发生的另一个奇怪的事情是,如果我改变递归的条件,假设我这样做: 然后是

  • 我做了一个使用递归方法反转单链表的函数。然而,我在执行下面的代码时遇到了一些困难: 我应该如何在ReverseCursive函数/方法中传递第二个参数,以便执行它? 作为第二个参数,我想简单地传递链表的头节点。但是我不知道如何从类的init方法中获取头节点linked_list 我试了几件事,但都解决不了。也许我不太擅长OOP概念。有人能帮我解决这个问题吗?

  • 我仍然在努力用递归技术来解决这个问题。我知道下面有更好的方法来解决我的问题,即反转链表。我见过的大多数方法都是通过从头到尾开始反转指针,或者使用迭代或递归。 我试图通过递归查找列表中的最后一个节点,然后每次函数返回时都更改指针来反转列表。 下面我到底做错了什么?或者这种方法甚至可以工作,而不需要向递归函数传递更多参数?提前感谢您的帮助。 编辑:另一次尝试 最终解决了: