设计一个递归算法,删除不带头结点的单链表L中所有值为x的节点。
代码:
void DEL_X(LinkList &L,ElemType x){
LNode *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);
}
问题:直接free(p)不会使链表断链吗?
第一种情况:第一个数据就为x,直接删除不存在断链。
第二种情况:如果没有使用递归,会断链。
但在这里,当使用递归传入的L为L->next时,L=L->next相当于L->next=L->next->next,如图所示(图画的不严谨嗷):
所以此题直接free( p)不会造成断链。