之前我们用迭代方式反转了链表,通过遍历每个节点,然后通过三个临时节点分别保存前一个节点,当前节点和下一个节点,反转每个节点。这篇笔记我将介绍用递归的方式,反转链表
用递归反向打印那一节我们就说过递归是怎么一回事,我们在递归满足退出条件时候,通过两个临时节点指针,实现链表的反转,具体看下图演示
先确定退出条件是达到最后一个节点时候,也就是x->link==NULL 时候递归开始退出,此时的x指向了200这个节点,新建节点指针q,并且用它来操作节点,使得q->link=p,再将p->link置为0,然后函数继续递归,p到了前一个节点然后再将q指向p的下一个节点,继续上一步的操作,直到p=50时候 ,链表就转换完成了。此时,p->link=NULL
void reverse(Node*p)//递归逆向链表
{
if (p->link ==NULL)
{
head = p;
return;
}
reverse(p->link);
Node* q = p->link;
q->link = p;
p->link = NULL;
}
C++