C++链表基础

来源:百度知道 编辑:UC知道 时间:2024/06/16 16:23:44
检查以下程序出错在什么地方,该程序编译通过,但是输入5项以上时就出错了,为啥
#include<iostream>
#include<string>
using namespace std;
//typedef int TEMP;
struct NODE{
int de,nf;
NODE *next;
};
class list{
private:
NODE *head;
public:
list(){head=NULL;}
void input(int de1,int nf1){
NODE *p=new NODE;
if(p==NULL){
cout<<"内存申请失败!";
return;
}
p->de=de1;
p->nf=nf1;
if(head==NULL){
head=p;
p->next=NULL;
}
else{
NODE *r=head;
if((r->nf)<nf1){
p->next=r;
head=p;
return;
}
else{
if(r->nf==nf1){
r->de=r->de+de1;
return;
}
else{
NODE *w;
for(;;r=r->next){
w=r->next;
if(w->nf==nf1){
w->de=w->de+de1;
return;
}
else{

NODE *r=head;
if((r->nf)<nf1){
p->next=r;
head=p;
return;
}
else{
if(r->nf==nf1){
r->de=r->de+de1;
return;
}
else{
NODE *w;
for(;;r=r->next){
w=r->next;
if(w!=NULL && w->nf==nf1){
w->de=w->de+de1;
return;
}
else{
if(w==NULL||(w->nf)<nf1){
p->next=r->next;
r->next=p;
break;

}
}
}
}
中原来少一个判断,已经填上了
if(w!=NULL && w->nf==nf1)
问题不是输入5项以上就出错,是只要向尾部添加节点就会出错,
原来的A.input(2,-32)恰好在第六项罢了。

中间去掉了一段,
if(w->nf==nf1){
w->de=w->de+de1;
return;
}
这段没有必要判断了

#include<iostream>
#include<string>
using namespace std;
//typedef int TEMP;
struct NODE{
int de,nf;
NODE *next;
};
class list
{ <