| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 774 人关注过本帖
标题:链表插入问题
只看楼主 加入收藏
心动音符
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
快速回复:链表插入问题
数据加载中...
 
   



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

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