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

给出题目:设计一个递归算法,删除不带头节点的单链表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。所以,我们在这个删除的过程中还是隐含的知道了要删除结点的前驱结点)

发布了38 篇原创文章 · 获赞 13 · 访问量 4350

猜你喜欢

转载自blog.csdn.net/YanWenCheng_/article/details/95772138
今日推荐