单链表

本文详细探讨了单链表的数据结构实现过程,特别关注了在C++中处理链表节点时常见的运行时错误。通过具体的代码示例,分析了while循环条件设置不当导致的runtime error,并分享了解决方案,强调了细节检查的重要性。
摘要由CSDN通过智能技术生成

#include
using namespace std;
struct Node
{
int data;
Node *next;
};
class LinkList
{
public:
LinkList(int a[],int sum);
LinkList();
~LinkList();
void PrintList();
void Delete1();
void Delete2();
private:
Node *first;

};
LinkList::LinkList(int a[],int sum)
{
first=new Node;
first->next=NULL;
for(int i=0;i<sum;i++)
{
Node *s;
s=new Node;
s->data=a[i];
s->next=first->next;
first->next=s;
}
}
LinkList::LinkList()
{
first=new Node;
first->next=NULL;
Node *s,*p;
p=first;
while(1)
{
int a;
cin>>a;
if(a==0)
break;
else
{
s=new Node;
s->data=a;
s->next=p->next;
p->next=s;
p=s;
}
}
}
void LinkList:: PrintList()
{
Node *p;
p=first->next;
while§
{
cout<data<<" ";
p=p->next;
}
cout<<endl;
}
void LinkList::Delete1()
{
int a;
cin>>a;
Node *p;
p=first;
while(p->next)//这里错过
{
Node *r;

     if((p->next)->data==a)
     {
         r=p->next;

         p->next=p->next->next;
         delete r;
         PrintList();
         return;
     }
     p=p->next;
 }
 cout<<"Error"<<endl;

}
void LinkList::Delete2()
{
int i;
cin>>i;
if(i<1)
{
cout<<“Error”<<endl;
return;
}
Node *p;
p=first;
int j=1;
while(p&&j<=i-1)
{
p=p->next;
j++;
}
if(!p||!p->next)throw “Error”;
else
{
Node *r;
r=p->next;
p->next=p->next->next;
delete r;
PrintList();
}
}
LinkList::~LinkList()
{
Node *p;
while(first)
{
p=first->next;
delete first;
first=p;
}
}
int main()
{
LinkList Link1;
Link1.PrintList();
const int MAX=100;
int a[MAX];
int j=0;
int sum;
while(1)
{
int b;
cin>>b;
if(b==0)
break;
else
{
a[j]=b;
sum=j+1;
j++;
}
}
LinkList Link2(a,sum);
Link2.PrintList();
Link1.Delete1();
Link1.Delete2();
return 0;
}#include
using namespace std;
struct Node
{
int data;
Node *next;
};
class LinkList
{
public:
LinkList(int a[],int sum);
LinkList();
~LinkList();
void PrintList();
void Delete1();
void Delete2();
private:
Node *first;

};
LinkList::LinkList(int a[],int sum)
{
first=new Node;
first->next=NULL;
for(int i=0;i<sum;i++)
{
Node *s;
s=new Node;
s->data=a[i];
s->next=first->next;
first->next=s;
}
}
LinkList::LinkList()
{
first=new Node;
first->next=NULL;
Node *s,*p;
p=first;
while(1)
{
int a;
cin>>a;
if(a==0)
break;
else
{
s=new Node;
s->data=a;
s->next=p->next;
p->next=s;
p=s;
}
}
}
void LinkList:: PrintList()
{
Node *p;
p=first->next;
while§
{
cout<data<<" ";
p=p->next;
}
cout<<endl;
}
void LinkList::Delete1()
{
int a;
cin>>a;
Node *p;
p=first;
while(p->next)//这里错过
{
Node *r;

     if((p->next)->data==a)
     {
         r=p->next;

         p->next=p->next->next;
         delete r;
         PrintList();
         return;
     }
     p=p->next;
 }
 cout<<"Error"<<endl;

}
void LinkList::Delete2()
{
int i;
cin>>i;
if(i<1)
{
cout<<“Error”<<endl;
return;
}
Node *p;
p=first;
int j=1;
while(p&&j<=i-1)
{
p=p->next;
j++;
}
if(!p||!p->next)throw “Error”;
else
{
Node *r;
r=p->next;
p->next=p->next->next;
delete r;
PrintList();
}
}
LinkList::~LinkList()
{
Node *p;
while(first)
{
p=first->next;
delete first;
first=p;
}
}
int main()
{
LinkList Link1;
Link1.PrintList();
const int MAX=100;
int a[MAX];
int j=0;
int sum;
while(1)
{
int b;
cin>>b;
if(b==0)
break;
else
{
a[j]=b;
sum=j+1;
j++;
}
}
LinkList Link2(a,sum);
Link2.PrintList();
Link1.Delete1();
Link1.Delete2();
return 0;
单链表的实现,在实现过程中,一直出现runtime error,刚开始一直不理解,提交了很多次,就是不对,后来发现是自己在while循环条件出现错误,while循环的条件刚开始我写的是p,后来改成了p->next,这里的错误出在当p为NULL时,调用p->next肯定错了,但是它还不报错,就是runtime error,细节决定成败,在纸上多画画思路,不要眼高手低,加油

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值