C++链表遍历问题
发布网友
发布时间:2022-04-27 10:06
我来回答
共2个回答
热心网友
时间:2023-09-11 14:51
delete head;
delete current;
delete end;
这三句显然有问题,你如果有一个节点的话,这3句都指向头节点,你删了3次,有2个以上的话,end和current指向同一个节点也会出错,而且如果节点多的话,你内存泄漏(没有删掉所有节点)
循环里面:i的初值不对,你输出的是i+1,初值应该为0 。条件temp->next!=NULL;不对,最后一个节点的next肯定为空,少输出一个节点,应该改为temp != NULL;追问node *temp;
while(head!=NULL)
{
temp=head;
delete temp;
head=head->next;
}
将释放内存改成这样后 还是显示错误
追答node *temp;
while(head!=NULL)
{
temp=head;
delete temp;
head=head->next;
}
你把temp删了也就是把head删了 怎么还能
head=head->next;
把这句话跟delete temp;换过来,改成
node *temp;
while(head!=NULL)
{
temp=head;
head=head->next;
delete temp;
}
热心网友
时间:2023-09-11 14:52
#include <iostream>
#include <string>
using namespace std;
struct node
{
int number;
string name;
node *next;
};
int main()
{
node *head=NULL;
node *end=head;
node *current;
char c='y';
do
{
if(head==NULL)
{
head=new node;
cout<<"创建头结点中..."<<endl;
cout<<"请输入编号:";
cin>>head->number;
cout<<"请输入命名:";
cin>>head->name;
head->next=NULL;
current=head;
}
else
{
cout<<"您是否需要继续添加结点(y/n):";
cin>>c;
if(c=='y')
{
current=new node;
cout<<"请输入编号:";
cin>>current->number;
cout<<"请输入命名:";
cin>>current->name;
current->next=NULL;
end->next=current;
}
else
{
cout<<"正在跳转..."<<endl;
}
}
end=current;
}while(c=='y');
cout<<"请查看您新建立的信息库"<<endl;
int i=1;
for(node *temp=head;temp!=NULL;temp=temp->next) // 这里的temp->next != null 改为 temp !=null 才会正常输出
{
cout<<"第"<<i+1<<"位 信息如下:"<<endl;
cout<<"编号"<<temp->number<<endl;
cout<<"命名"<<temp->name<<endl;
++i;
}
delete head;
delete current;
//delete end; // 这里没必要delete end 因为end不是new所获的内存, 系统会自动回收
return 0;
}