题目描述:
设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。
算法思想:
核心代码:
void del_x_3(LNode* &L,int x)
{
LNode* p;
if(L==NULL)
return;
if(L->data==x)
{
p=L;
L=L->next;
free(p);
del_x_3(L,x);
}
else
del_x_3(L->next,x);
}
L1->L2->L3
L1的地址为650,L2的地址为670,L3的地址为690
递归第一次:del_x_3(L->next,x);
此时的L地址值为670,data=2,所以进行操作L=L->next;此时L的地址为690.
递归第二次:del_x_3(L->next,x);
递归第三次:del_x_3(L->next,x);开始返回
返回的时候可以发现,现在的1后面指向的是3.实际上并没有断链。