一个数据结构问题!

houzhenghui123 2010-12-03 06:28:09
这是在严蔚敏c语言版视频上面的一个算法(递归删除指定元素节点),有点很是不解,希望前辈们指点下!
伪代码贴上:
void delete(LinkList *L,ElemType x)
{
//LinkList *L链表指针
//ElemType x 数据元素
//L为无头结点的单链表头指针
if(L)
{
if(L->data==x)
{
p=L;
L=L->next;
free(p);
delete(L,x)
}
else
{
delete(L->next,x);
}
}
}

疑惑:
代码段:
     p=L;
L=L->next;
free(p);

这个是删除节点p的代码,但是这样删除以后,链表就串不起来了!是我看错了吗?望解释一下!
ps:小菜去上自习去了,回来结贴!再次感谢!
...全文
86 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghost_nmh 2010-12-03
  • 打赏
  • 举报
回复
楼主看书很仔细嘛,赞一个!
应该改为:
LinkList * delete(LinkList * L, ElemType x)
{
//LinkList *L链表指针
//ElemType x 数据元素
//L为无头结点的单链表头指针
if(L)
{
if(L->data == x)
{
p = L;
L = L->next;
free(p);
return delete(L, x)
}
else
{
L->next = delete(L->next, x);
return L;
}
}
else return NULL;
}
建议楼主注意编码规范,使用通用一些的编码规范让别人看程序也看的舒服,推荐匈牙利编程规范
無_1024 2010-12-03
  • 打赏
  • 举报
回复
p=L;
L=L->next;
free(p);
是删除头结点
但不是头结点时 就会执行 delete(L->next,x);
举个例子
链表是1->2->3->4
如果x = 2;
首先 1 != 2
执行 L->next
而L->next->data == 2
就是p = L->next;
L->next = L->next->next;
free(L->next);
然后又执行delete(L,x)
明白了没??
kisshujinwen 2010-12-03
  • 打赏
  • 举报
回复
我猜想的:
p=L;
L=L->next;
free(p);
delete(L,x)
还有个delete(L,x)函数。free只是释放了内存而已,然后通过delete函数,来把这个点从链表中删除。
houzhenghui123 2010-12-03
  • 打赏
  • 举报
回复
貌似没有打错字!
大家加油!come on!嘿嘿!

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧