题目要求
设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。
代码
void del_x(LinkList &L, ElemType x)
{
LinkList p;
if(L == NULL)
return;
if(L->data == x) {
p = L;
L = L->next;
free(p); // *
del_x(L, x);
}
else {
del_x(L->next, x);
}
}
疑点解析
1.返回的头指针是否会变到最后一个元素的位置?
答:不会,因为是递归调用,只返回最近一层的结点,这个结点就是第一个值非x的结点。
2.代码里打*的地方是free掉当前结点,是否会断链?
答:不会,由于是递归函数,我们可以把当前结点 L 想象成是上一层函数传递的L->next,这里让L = L->next实际上就是让pre->next = L->next(跳过中间结点)。