为什么我在尝试打印单链表中的元素时得到这个永无止境的循环
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;
这是一个错误的一个原因是您正在创建一个具有未初始化数据和未初始化下一个指针的头节点。您可以通过为节点 class 添加构造函数或使用
来解决此问题
Node *head = new Node{};
或者如果您使用的是旧编译器,则为 Node() 添加一个构造函数。
但是为什么你首先要列表中的这个额外节点?当您去打印时,除非您修改打印代码以忽略最后一个节点,否则您将打印它。
更好的解决方案是将此行替换为:
Node *head = nullptr;
或者因为您使用的是 NULL 而不是 nullptr
Node *head = NULL;
我是数据结构的新手,我能够在 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;
这是一个错误的一个原因是您正在创建一个具有未初始化数据和未初始化下一个指针的头节点。您可以通过为节点 class 添加构造函数或使用
来解决此问题Node *head = new Node{};
或者如果您使用的是旧编译器,则为 Node() 添加一个构造函数。
但是为什么你首先要列表中的这个额外节点?当您去打印时,除非您修改打印代码以忽略最后一个节点,否则您将打印它。
更好的解决方案是将此行替换为:
Node *head = nullptr;
或者因为您使用的是 NULL 而不是 nullptr
Node *head = NULL;