标题:链表插入问题
只看楼主
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
 问题点数:0 回复次数:3 
链表插入问题

程序如下:
int list::inser(const int x,const int i)
{
listnode *p=first;int k=0;
while(p!=NULL&&k<i-1)
{p=p->link;k++;}
if(p==NULL&&first!=NULL) /* 这块我不太明白*p不是等于first的吗那么 if(p==NULL&&first!=NULL)不是矛盾吗?
{cout<<"invalid position for iosettation! \n"; return 0;}
listnode *newnode=new listnode(x,NULL);

if(first==NULL || i==0){
newnode->link=first;
if(first==NULL)
last=newnode;
first=newnode;
}

else{
newnode->link=p->link;
if(p->link==NULL) last=newnode;
p->link=newnode;
}
return 1;
}

搜索更多相关主题的帖子: 链表 NULL first int 
2006-07-13 22:00
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 
if(p==NULL&&first!=NULL)
{cout<<"invalid position for iosettation! \n"; return 0;}
书上说这代表非空表而且链短,找不到i-1个节点! 这为什么就能代表找不到i-1个节点了呢 我不明白

2006-07-13 22:05
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 

top


2006-07-14 22:43
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
得分:0 
在 if( p == NULL && first != NULL)之前已经执行了 while(p!=NULL&&k<i-1) {p=p->link;k++;}
估计这里的意思是这个链表是带头结点的,但是可能一个元素都没有或者元素个数小于i-2. 所以 可以进入while循环,但是就是在i-2之前就退出循环,导致p==NULL所以if( p == NULL && first != NULL)就为真,就输出 {cout<<"invalid position for iosettation! \n"; return 0;}

内存模型

p指向
first->next --- NULL
一开始 由于p不为空,假使 k<i-1那么就进入循环 经过 p = p->next之后, p就等于null 就退出循环
所以( p == NULL && first != NULL)就为真,这句一点都不矛盾

[此贴子已经被作者于2006-7-14 23:55:28编辑过]


c++/C + 汇编 = 天下无敌
2006-07-14 23:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-78210-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.265036 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved