关于在递归中删除单链表节点的问题

给出题目:设计一个递归算法,删除不带头节点的单链表L中所有值为x的节点

//(1)删除不带头节点L中所有值为x的节点
void Del_x_1(LinkList &L, ElemType x)
{
	LNode *p;
	if(L == NULL)
		return;
	if(L->data == x)
	{
		p = L;
		L = L->next;
		free(p);         //注意:此处不会断链
		Del_x_1(L,x);
	}
	else
		Del_x_1(L->next,x);
}

此处的疑惑是之前单链表的删除节点,需要找到其前驱节点来改变指针,再free掉。而此处递归没有找前驱为什么不断链?
在这里插入图片描述

其实,L2 == L1->next(即L1->next为结点1的next域)
而执行L2= L2->next现在就相当于把2的next域指向了3。(L1->next = L2->next。所以,我们在这个删除的过程中还是隐含的知道了要删除结点的前驱结点)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YanWenCheng_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值