一个信号链接列表,我希望通过递归来实现它。但我不理解这一行的含义head->next->next = head;
。
为什么需要head->next->next
?
struct Node{
int data;
Node* 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;
}
答案 0 :(得分:3)
让我使用这个列表。
reverseByRecursion(node1)
被召唤。node1
和node1->next
都不是NULL
,因此会调用newHead = reverseByRecursion(head2);
。node2
和node2->next
都不是NULL
,因此会调用newHead = reverseByRecursion(head3);
。head3->next
为NULL
,因此从head3
返回reverseByRecursion(head2)
。head = node2
和head->next = node3
,因此head->next->next = head;
会将node3->next
设置为node2
。head->next = NULL;
会将node2->next
设置为NULL
。 (图2)newHead
,node3
,从reverseByRecursion(head2)
返回。head = node1
和head->next = node2
,因此head->next->next = head;
会将node2->next
设置为node1
。head->next = NULL;
会将node1->next
设置为NULL
。 (图3)newHead
,node3
,从reverseByRecursion(node1)
返回。node3
作为头部,列表正好相反。答案 1 :(得分:0)
您的基本案例表明,如果没有更多元素,那么当前节点将成为列表的头部。
head-> next-> next = head line表示正在重复使用下一个节点,其指针指向后方(与之前相反的方向)。由于节点曾经是当前节点之后的NEXT节点,因此它成为当前节点之前的PREVIOUS节点,因此它的下一个指针应该指向当前节点(" head")。