65,211
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string>
using namespace std;
class book
{
public:
int num;
float price;
book *next;
};
book *creat()
{
book *head=NULL,*p1=NULL,*p2=NULL;
string s;
cout<<"请输入编号"<<endl;
cin>>s;
if(atoi(s.c_str()))
{
p1=new book;
head=p2=p1;
}
p1->num=atoi(s.c_str());
while(p1->num!=0)
{
cout<<"请输入价格"<<endl;
cin>>p1->price;
p1=new book;
p2->next=p1;
p2=p1;
cout<<"请输入编号以0结束"<<endl;
cin>>p1->num;
}
p1=NULL;
delete p1;
p2->next=NULL;
return head;
}
void show(book *p)
{
cout<<"图书信息:"<<endl;
while (p)
{
cout<<p->num<<"\t"<<p->price<<endl;
p=p->next;
}
delete p;
}
void main()
{
book *head;
head=creat();
show(head);
}
p1=NULL;
delete p1;
p2->next=NULL;//这里退去循环后p1=p2,所以虽然释放了该节点但是p2仍然指着该节点并将它连入了链表~
修改:
cout<<"请输入价格"<<endl;
cin>>p1->price;
while(p1->num!=0)
{
p1=new book;
cout<<"请输入编号以0结束"<<endl;
cin>>p1->num;
if(p1->num == 0)
break;
cout<<"请输入价格"<<endl;
cin>>p1->price;
p2->next=p1;
p2=p1;
}
book *creat()
{
book *head=NULL,*p1=NULL,*p2=NULL;
string s;
cout<<"请输入编号"<<endl;
cin>>s;
if(atoi(s.c_str()))
{
p1=new book;
head=p2=p1;
}
p1->num=atoi(s.c_str());
while(p1->num!=0)
{
cout<<"请输入价格"<<endl;
cin>>p1->price;
p1=new book;
p2->next=p1;
p2=p1;
cout<<"请输入编号以0结束"<<endl;
cin>>p1->num; //当p1->num为0时候,那么p1,p2都指向了最后一个节点
}
p1=NULL; //这里让p1指向为空,所以下面的delete p1;没用
delete p1; //没起到作用
p2->next=NULL; //p2指向最后的一个节点,此处让最后一个节点的下一个为NULL,最后一个节点未删除
return head;
}