一个链表的结点插入问题

chinayang9 2004-10-27 09:45:38
严氏<数据结构C语言版>中有这样的一个算法:

Status ListInsert_L(LinkList &L,int i,ElemType e){
//带头结点的单链表线性表L的第i个元素之前插入元素e
if(!LocatePos(L,i-1,h)) return ERROR; //i值不合法
if(!MakeNode(s,e)) return ERROR;
InsFirst(h,s);
return OK
}

关于这一行:
if(!LocatePos(L,i-1,h)) return ERROR; //i值不合法
为什么要判断i-1位置呢?当我i输入1时会不会报错呢?
...全文
207 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenjun716 2004-10-31
  • 打赏
  • 举报
回复
把各个函数的功能写出来。否则不太好说,下面说的不知对不对
一般在第i个位置插入一元素,应使指针指向其前一个位置。
然后分配一个结点(同时指值赋进去),使该结点的next指向第i个元素,而第i-1个元素的next指向新分配的结点,这样就插进去了。
带首结点的链表就是让这些操作统一,不搞特殊。
LocatePos(L,i-1,h)//应该是让指针指向第i-1个位置吧,i=1时,指向是首结点。
MakeNode(s,e)//分配结点,把要插入的值赋进去。
InsFirst(h,s)//这个应完成插入操作吧,但从你的函数名看,不知什么意思。




newegg2002 2004-10-31
  • 打赏
  • 举报
回复
if(!LocatePos(L,i-1,h)) return ERROR;
//这个函数的功能是不是返回L链表中第i-1个链表的指针h啊?
如果是这样的话。那么此句的意思当然就是你向Status ListInsert_L(LinkList &L,int i,ElemType e)这个函数传入的i是否越界了,,假如链表有4个结点,你传入参数7,就只能由此函数负责报错,,
另外,如果定位成功的话,h就是将要进行后插的结点了。。
当你要给第一个结点之前插入一个结点的话,那么此时i-1=0了。h就是头结点了。。
这也是具有头结点的链表的好处之一。任何结点的处理都是统一的,没理由给第一个结点搞特殊!
chinayang9 2004-10-31
  • 打赏
  • 举报
回复
那么在LacatePos函数中,
我就要定义所有的0<=i<=Len的数字返回TURE吧?
这样的话有点儿不大好接受,0也可以????
DuoFG 2004-10-27
  • 打赏
  • 举报
回复
if(!LocatePos(L,i-1,h)) return ERROR;
这句的意思是说,找不到第i-1个元素的时候出错
当 i<1 或 i>表长加1 时出错
lynnboy 2004-10-27
  • 打赏
  • 举报
回复
把其他函数的定义写出来,不然不知道你的链表具体逻辑,没法看。
RaReXray 2004-10-27
  • 打赏
  • 举报
回复
在第i个元素前插入元素e,需要做链接使i-1个元素指向e,使e指向第i个元素。这个应该是要判断第i-1个元素的原因吧。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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