在C 中显示LinkedList时永无止境的循环
Never ending loop in displaying LinkedList in C++
在删除第一个元素后尝试显示列表时,在以下代码中,它导致了下一个元素的无尽环路。除了删除第一个元素以外,不会发生此问题。我不知道为什么会发生这种情况?有人可以告诉我错误在哪里?
#include<iostream>
using namespace std;
class node
{
public:
int data;
node *link;
};
class linkedlist
{ node *head;
public:
linkedlist()
{
head=NULL;
}
int add(int data1)
{ node *insertnode=new node;
insertnode->data=data1;
insertnode->link=NULL;
node *temp=head;
if(temp!=NULL)
{
while(temp->link!=NULL)
{
temp=temp->link;
}
temp->link=insertnode;
}
else{head=insertnode;}
}
void disp()
{ node *temp1=head;
cout<<endl;
if(temp1==NULL)
{cout<<"Empty"<<endl;
}
if(temp1->link==NULL)
{
cout<<temp1->data<<endl;
}
else{
do{cout<<temp1->data<<endl;
temp1=temp1->link;
}
while(temp1!=NULL);
}
}
int remove(int removedata)
{
node *temp2=head;
if(temp2==NULL)
{}
if(temp2->link==NULL)
{
delete temp2;
head=NULL;
}
else
{
node *previous;
do
{
if(temp2->data==removedata) break;
previous=temp2;
temp2=temp2->link;
}while(temp2!=NULL);
previous->link=temp2->link;
delete temp2;
}
}
};
int main()
{
linkedlist list;
list.add(10);
list.add(100);
list.add(200);
list.remove(10);
list.disp();
}
谢谢大家。问题已解决
在您的删除上查看:
node *previous;
do
{
if(temp2->data==removedata) break;
previous=temp2;
temp2=temp2->link;
}while(temp2!=NULL);
previous->link=temp2->link;
delete temp2;
如果第一个元素是匹配的元素,则循环将终止终止,从而导致非初始化previous
,而不更改temp2
(它仍然是头部)。
您现在要做的是:
- 将
previous->link
设置为一定值。请注意,这是未定义的行为,因为您不知道previous
是什么。 - 删除
temp2
-这是头部元素,但永远不会改变头部。这将导致列表中的第一个元素是未定义的,一旦访问它,任何事情都可能发生(同样是未定义的行为)。
因此,基本上 - 删除第一个元素后 - 尝试显示列表时,可能会发生任何事情 - 包括您遇到的无限环路。
您没有将指针调整为头部。猜猜这就是为什么失败的原因。
删除第一个元素时,必须将列表的头指向下一个元素。您在这里没有这样做。
在disp()
中,您访问temp1->link
,无论temp1
是否为null
if(temp1==NULL)
{cout<<"Empty"<<endl;
}
if(temp1->link==NULL)
{
cout<<temp1->data<<endl;
}
remove()
中的temp2
相同。
node *previous;
被删除时使用非专业化。
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 为什么我在尝试在单向链表中打印元素时会出现这个永无止境的循环
- 它不显示数据,只显示永无止境的循环
- 我们如何知道 python 代码在 C 或 C++ 中是否处于永无止境的循环中
- 永无止境的 while-循环C++即在输入字符串 == no 时结束
- 为什么这是一个永无止境的循环
- 在C 中显示LinkedList时永无止境的循环
- C++ 中的永无止境循环,比较两个字符
- 我的循环永无止境.我不明白为什么.任何想法