首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++中链表插入有关问题

2012-04-13 
c++中链表插入问题一个单链表,要求在值为“jone”的结点前插入值为“marit”的结点,若没有值为“jone”的结点,则

c++中链表插入问题
一个单链表,要求在值为“jone”的结点前插入值为“marit”的结点,若没有值为“jone”的结点,则插在链表最后。请帮我看下下面的程序:当有jone这个结点时,程序可以输出正确结果,没有jone结点,要插入在链表末尾时,程序跳到调试状态了,是什么原因?
#include <iostream.h>
#include <string.h>
struct Node
{
char a[20];
Node* next;
};
void insert(Node* head);
void main()
{
Node* head;
Node* x1=new Node;
strcpy(x1->a,"hello");
head=x1;
x1->next=NULL;
Node* x2=new Node;
strcpy(x2->a,"jone");
x1->next=x2;
x2->next=NULL;
Node* x3=new Node;
strcpy(x3->a,"good");
x2->next=x3;
x3->next=NULL;
Node* x4=new Node;
strcpy(x4->a,"better");
x3->next=x4;
x4->next=NULL;
cout<<"插入之前"<<endl;
Node* p=new Node();
for(p=head;p;p=p->next)
{
cout<<p->a<<"->";
}
cout<<'0'<<endl;
insert(head);
cout<<"插入之后:"<<endl;
for(Node* p1=head;p1;p1=p1->next)
{
cout<<p1->a<<"->";
}
cout<<'0'<<endl;

}
void insert(Node* head)
{
Node* p=new Node();
strcpy(p->a,"marit");
Node* p1=head;
while(strcmp(p1->next->a,"jone")!=0 && p1->next)
{
p1=p1->next;
}
if(p1->next==NULL)
{
  p1->next=p;
  p->next=NULL;
}
else
{
p->next=p1->next;
p1->next=p;
}

}

[解决办法]

C/C++ code
void insert(Node* head){    Node* p=new Node();    strcpy(p->a,"marit");    Node* p1=head;    while(p1->next && strcmp(p1->next->a,"jone")!=0)    /*将条件p1->next前置,避免出现空指针下的->a*/    {        p1=p1->next;    }    if(p1->next==NULL)    {        p1->next=p;        p->next=NULL;    }    else    {        p->next=p1->next;        p1->next=p;    }}
[解决办法]
将while(strcmp(p1->next->a,"jone")!=0 && p1->next)
改成
while(p1->next && strcmp(p1->next->a,"jone")!=0)
你的循环条件是当p1->next为空时,还调用空指针,自然报错。

热点排行