数据结构:关于链表直接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)不会造成断链。

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值