单链表插入和删除算法 问题

wyongliang 2009-07-30 10:39:03
插入算法

Status ListInsert_L(LinkList &L,int i,ElemType e){
// 带头结点的单链表L中第i个位置前插入元素e
p=L,j=0;

while(p&&j<i-1){p=p->next;++j;}

if(!p||j>i-1) return ERROR;

s=(LinkList)malloc(sizeof(LNode));

s->data=e;s->next=p->next;

p->next=s;

return OK;

}//ListInsert_L


1,最后一个结点后面可以插入结点吗?因为我看的结果是:如果i=(线性表长度+1),那么执行while语句最后p=null 则不执行插入算法!这里的i位置前 i包括最后结点后面吗?
2,如果是空链表,则p=L=null ,那么就不执行while语句 并且直接执行if后面语句返回ERROR
那就是不能在空链表上插入数据?

删除算法

Status ListDelete_L(LinkList &L,int i,ElemType &e){

p=L,j=0;

while(p-->next&&j<i-1){p=p->next;++j;}

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

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

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

return OK;

}//ListDelete_L



为什么删除算法中的while循环里面条件是p-next 而不是p了??
...全文
759 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
i 可以取0(插在第一)到L(插在最后)

[Quote=引用 6 楼 wyongliang 的回复:]
插入算法中 如果L是带头结点的空链表 如何插入数据
此时 如果i可以取什么值?
取0啊
好像唯一可以取i=1
如果i=1的话
while循环执行一次 此时p=p-->next==null
那么下面就执行if语句了
就不能插入数据了 为什么啊 各位大哥 指点下啊
[/Quote]
wyongliang 2009-07-31
  • 打赏
  • 举报
回复
插入算法中 如果L是带头结点的空链表 如何插入数据
此时 如果i可以取什么值?
好像唯一可以取i=1
如果i=1的话
while循环执行一次 此时p=p-->next==null
那么下面就执行if语句了
就不能插入数据了 为什么啊 各位大哥 指点下啊
LeonTown 2009-07-31
  • 打赏
  • 举报
回复
或许,可以将在i之前插入,
改为在i-1之后插入;
检查i-1是否小于0
wyongliang 2009-07-31
  • 打赏
  • 举报
回复
我顶 我顶 我顶 我顶 我顶 我顶 我顶 我顶 我顶
wyongliang 2009-07-31
  • 打赏
  • 举报
回复
i取0直接执行if语句返回错误啊
我看错了???
wyongliang 2009-07-30
  • 打赏
  • 举报
回复
我自己顶
henry11 2009-07-30
  • 打赏
  • 举报
回复
回帖是一种美德!
wyongliang 2009-07-30
  • 打赏
  • 举报
回复
初始化链表以后 链表不就是空的吗?
wyongliang 2009-07-30
  • 打赏
  • 举报
回复
上面的算法中 没有看到有L初始化啊
我是菜鸟 麻烦详细解释 可以吗
  • 打赏
  • 举报
回复
为什么删除算法中的while循环里面条件是p-next 而不是p了??
因为p->Next对应的节点才是第I个节点

1,最后一个结点后面可以插入结点吗?可以 因为我看的结果是:如果i=(线性表长度+1),那么执行while语句最后p=null 则不执行插入算法!这里的i位置前 i包括最后结点后面吗?

2,如果是空链表,则p=L=null ,那么就不执行while语句 并且直接执行if后面语句返回ERROR
那就是不能在空链表上插入数据?

是的,所以需要初始化L



33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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