提问者:小点点

为什么当我试图打印单个链表中的元素时,我得到了这个永不结束的循环


我是数据结构的新手,我能够用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;
}

共1个答案

匿名用户

您的bug在这里:

Node *head = new Node;

这是一个bug的原因之一是您正在创建一个带有未初始化的数据和未初始化的下一个指针的head节点。 您可以通过为节点类添加构造函数或使用

Node *head = new Node{};

或者为Node()添加一个构造函数(如果您有旧的编译器)。

但是为什么你首先要在列表中多出这个节点呢? 当您要打印时,您将打印它,除非您修改打印代码以忽略最后一个节点。

更好的解决办法是将这一行替换为:

Node *head = nullptr;

或者因为您正在使用NULL而不是nullptr

Node *head = NULL;