各位大神们帮我看看这个单链表的插入删除算法

手写的从前66 2019-02-03 11:40:05
/* 初始条件:顺序线性表L已存在,1<=i<=ListLength(L) */
/* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度-1 */

Status ListDelete(LinkList *L, int i, ElemType *e)
{
int j;
LinkList p, q;

p = L;//指向第一个结点
j = 1;//计数器

while( p->next && j<i )//遍历这个单链表寻找第i-1个结点
{
p = p->next;
++j;
}

if( !(p->next) || j>i )
{
return ERROR;
}

q = p->next;
p->next = q->next;

*e = q->data;
free(q);

return OK;
}

if( !(p->next) || j>i )这个判断的意义是什么?为什么要加这个判断?
...全文
305 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-02-06
  • 打赏
  • 举报
回复
意义LS已经说了
理论上不会发生j>i,因为while( p->next && j<I )限制了j顶多==i就退出循环了
独孤过 2019-02-04
  • 打赏
  • 举报
回复
!(p->next),表示已无后继,遍历至链表尾,j>i,删除节点下标大于链表长度,总的来说就是下标不合法

65,189

社区成员

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

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