【发布时间】:2021-10-10 11:37:58
【问题描述】:
#include <iostream>
using namespace std;
class Node{
public:
int data;
Node *next;
};
int main()
{
Node *head=NULL;
Node *temp;
Node *nodeToAdd;
int ch,val,pos,flag=1;
while(flag){
cout<<"\n1.Add at End 2.Add at head 3.Traverse 4.Insert between Nodes 9.EXIT\n";
cin>>ch;
switch(ch){
case 1:
nodeToAdd=new Node();
cout<<"Enter Value - ";
cin>>val;
nodeToAdd->data=val;
if(head==NULL){
head=nodeToAdd;
}
else{
temp=head;
while(temp->next!=NULL){
temp=temp->next;
}
temp->next=nodeToAdd;
}
break;
case 2:
nodeToAdd=new Node();
cout<<"Enter Value - ";
cin>>val;
nodeToAdd->data=val;
if(head==NULL){
head=nodeToAdd;
}
else{
nodeToAdd->next=head;
head=nodeToAdd;
}
break;
case 3:
if(head==NULL){
cout<<"List is Empty";
return 0;
}
else{
temp=head;
while(temp!=NULL){
cout<<temp->data<<"->";
temp=temp->next;
}
}
cout<<"NULL";
break;
case 4:
nodeToAdd=new Node();
cout<<"Enter Value - ";
cin>>val;
cout<<"Enter Position - ";
cin>>pos;
nodeToAdd->data=val;
if(head==NULL){
cout<<"List Is Empty";
return 0;
}
else{
temp=head;
int i=1;
while(i<pos){
i++;
temp=temp->next;
}
temp->next=nodeToAdd;
nodeToAdd->next=temp->next;
}
break;
case 9:
flag=0;
break;
}
}
return 0;
}
如果成功添加了 1 或 2 个节点,并且在没有任何错误的情况下遍历它,但在运行 case 4 节点后添加没有任何错误,但是当我尝试遍历列表循环无限运行时,我无法理解我的错误。在两个节点之间插入节点时,请告诉我案例 4 中的错误。
【问题讨论】:
-
temp->next = nodeToAdd; nodeToAdd->next=temp->next;仔细考虑这两个语句的顺序。你改变temp->next。然后将nodeToAdd->next设置为temp->next的新值,即nodeToAdd本身。 -
大多数情况下你没有初始化
next,这可能是死循环的来源。 -
只是为了澄清,你正在制作一个 C 风格的链表。如果 C++ 真的用于在声称使用 C++ 的课程中教授数据结构,那就太好了。
-
如果您在调试器中单步执行代码并查看每一步的变量,您应该能够轻松发现这一点。我的意思是一次步进 1 行,而不仅仅是在调试器中执行代码,主动调试代码。
标签: c++ algorithm data-structures linked-list nodes