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