如何理解head->next->next = head;通过递归反向单个列表?

Bla*_*mba -1 algorithm recursion linked-list

一个单链表,我想通过递归来修改它。但我不明白这一行的含义head->next->next = head;

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

struct Node{
    int data;
    Node* next;
};
Run Code Online (Sandbox Code Playgroud)

下面是实现代码:

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;    
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*CAT 8

让我来处理这份清单。

初步名单

  1. reverseByRecursion(node1) 叫做。
  2. 既不是node1也不node1->nextNULL,所以newHead = reverseByRecursion(head2);被称为。
  3. 既不是node2也不node2->nextNULL,所以newHead = reverseByRecursion(head3);被称为。
  4. head3->nextNULL,所以head3从 返回reverseByRecursion(head2)
  5. head = node2head->next = node3,所以head->next->next = head;将设置node3->nextnode2
  6. head->next = NULL;将设置node2->nextNULL. (图 2)
  7. newHead,也就是node3从 返回reverseByRecursion(head2)
  8. head = node1head->next = node2,所以head->next->next = head;将设置node2->nextnode1
  9. head->next = NULL;将设置node1->nextNULL. (图 3)
  10. newHead,也就是node3从 返回reverseByRecursion(node1)
  11. 现在这个列表被颠倒了,以 havenode3作为头部。

图 2
修改清单

图 3
反转列表