为什么我在尝试在单向链表中打印元素时会出现这个永无止境的循环
why am i getting this never ending loop while trying to print elements in singly linked list
我是数据结构的新手,我能够在 c 中实现这个单向链表并且工作正常。虽然我试图在C++中实现相同的内容,但除了printList()
部分之外,我几乎完成了它。同样的函数在 C 中没有任何问题,但是当它在 C++ 中执行时,它会进入一个永无止境的循环。有人可以帮我解决这个问题吗?
另外,您能否向我推荐一些好的数据结构教程,因为它从未在我们大学教授过,如果不花我们在YouTube上观看一个概念的不同教程,我就无法很好地理解它。
#include <iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
Node *head = new Node;
void printList(){
Node *temp = head;
while(temp!=NULL){
cout << temp->data;
temp = temp->next;
}
}
void insertNode(int x){
Node *temp = new Node;
temp->data = x;
temp->next = head;
head = temp;
}
int main(){
int n,i,x;
cout << "How many numbers?" << endl;
cin >> n;
for(i=0; i<n; i++){
cout << "Enter data: " << endl;
cin >> x;
insertNode(x);
}
printList();
return 0;
}
你的错误在这里:
Node *head = new Node;
这是一个 bug 的一个原因是,您正在创建一个具有未初始化数据和未初始化的下一个指针的头节点。您可以通过为 Node 类添加构造函数或使用
Node *head = new Node{};
或者如果你有一个旧的编译器,则为 Node(( 添加一个构造函数。
但是,为什么首先要在列表中显示这个额外的节点呢?当您进行打印时,除非您修改打印代码以忽略最后一个节点,否则您将打印它。
更好的解决方案是将此行替换为:
Node *head = nullptr;
或者因为您使用的是 NULL 而不是 nullptr
Node *head = NULL;
相关文章:
- 如何循环打印顶点结构
- 如何在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++ 中的永无止境循环,比较两个字符
- 我的循环永无止境.我不明白为什么.任何想法