Algorithm 如何理解head->next->next=head;对于递归的反向单列表?

Algorithm 如何理解head->next->next=head;对于递归的反向单列表?,algorithm,recursion,linked-list,Algorithm,Recursion,Linked List,一个单链接列表,我想通过递归来显示它。但是我不明白这行的意思head->next->next=head 为什么需要head->next->next 以下是实现代码: Node* reverseByRecursion(Node *head) { if(head == NULL || head->next == NULL) return head; Node *newHead = reverseByRecursion(head->next);

一个单链接列表,我想通过递归来显示它。但是我不明白这行的意思head->next->next=head

为什么需要head->next->next

以下是实现代码:

Node* reverseByRecursion(Node *head)
{

    if(head == NULL || head->next == NULL) 
        return head;

    Node *newHead = reverseByRecursion(head->next);

    head->next->next = head;
    head->next = NULL;

    return newHead;    
}

基本情况是,如果没有更多的元素,则当前节点将成为列表的标题


head->next->next=头线意味着下一个节点被重用,其指针指向与前面相反的方向。由于该节点过去是当前节点之后的下一个节点,因此它成为当前头之前的前一个节点,因此其下一个指针应该指向当前节点头。

让我来处理此列表

调用reverseByRecursionnode1。 node1和node1->next都不为空,因此newHead=reverseByRecursionhead2;被称为。 node2和node2->next都不为空,因此newHead=reverseByRecursionhead3;被称为。 head3->next为空,因此head3从reverseByRecursionhead2返回。 head=node2,head->next=node3,所以head->next->next=head;将在节点2旁边设置节点3->。 head->next=NULL;将node2->设置为空。图2 newHead是节点3,从reverseByRecursionhead2返回。 head=node1,head->next=node2,所以head->next->next=head;将在节点1旁边设置节点2->。 head->next=NULL;将节点1->设置为空。图3 newHead是从reverseByRecursionnode1返回的node3。 现在列表颠倒过来,以node3作为头部。 图2

图3
我和你在一起,我不明白,如果把中文评论放在一边,那代码看起来就很傻。C和C++是不同的语言。不要在C++中编写这样的代码,最好使用类的标准库。为你的问题选择一种语言!要么代码是你的,在这种情况下,你应该知道你在做什么。或者不是你的。然后让你抄袭的人解释。从某些网站复制代码总是一个坏主意。如果没有更多信息,这可能会调用未定义的行为。通常,列表不太适合递归。更好地使用迭代。@πάνταῥεῖ 你在说什么?“我不明白你的意思。”布莱克曼巴,所以我们误解了。谢谢你的解释。
Node* reverseByRecursion(Node *head)
{

    if(head == NULL || head->next == NULL) 
        return head;

    Node *newHead = reverseByRecursion(head->next);

    head->next->next = head;
    head->next = NULL;

    return newHead;    
}