数据结构:关于链表直接free(p)会不会造成断链

设计一个递归算法,删除不带头结点的单链表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)会不会造成断链_第1张图片
所以此题直接free( p)不会造成断链。

你可能感兴趣的:(数据结构:关于链表直接free(p)会不会造成断链)