c++ - 从自定义链接列表打印值时陷入无限 while 循环

标签 c++ templates

我正在尝试实现一个基本的单链表。在那里,我试图从头部插入。然后我尝试打印插入的数据。我的代码如下:

 #include<iostream>
 using namespace std;

 template<class T>
 class Node
 {
      public:
      T data;
      Node<T> *next;
      Node():data(T()),next(NULL)
      {}
 };

template<class T>
class SinglyinkedList
{
      public:
      Node<T> *head;
      SinglyinkedList():head(NULL)
      {}
      void insertFromHead(T data)
      {
          Node<T> *temp;
          temp->data = data;
          temp->next = head;
          head = temp;
      }
      void printLinkedist()
      {
           Node<T> *temp;
           temp = head;

           while(temp != NULL)
           {
               cout <<"Hi";
               cout << temp->data;
               temp = temp->next;
           }
      }
 };

int main()
{
    SinglyinkedList<int> list;
    list.insertFromHead(10);
    list.insertFromHead(20);
    list.insertFromHead(30);
    list.insertFromHead(40);
    list.printLinkedist();
    return 0;
}

但是当我打印链接列表时,它只是陷入 while 循环并一次又一次地打印相同的值。 谁能帮助我为什么陷入循环?

最佳答案

链表代码通常为每个节点包含一次 new 的使用,而您忘记了您的。
这意味着您使用的是未初始化的指针,该指针是未定义的。

添加缺少的对象:

void insertFromHead(T data)
{
    Node<T> *temp = new Node<T>;
    temp->data = data;
    temp->next = head;
    head = temp;
}

如果向 Node 添加构造函数

Node(const T& d, Node<T>* n): data(d), next(n) {}

你也可以缩短一点:

void insertFromHead(const T& data)
{
    head = new Node<T>(data, head);
}

关于c++ - 从自定义链接列表打印值时陷入无限 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47699109/

相关文章:

c++ - Google模拟和替代关键字

python - swig 3.0.1、python 3 和 bool 数据类型

c++ - 在 C++ 中返回一个 const 引用

c++ - 从 C++ 模板返回 NULL

c++ - 奇怪的输出 : why would this code give any meaningful output, 更不用说这个了?

可以实例化c++类模板,但具有相同模板参数的函数模板实例化失败

java - 如何自动将代码添加到我创建的每个类中

c++ - 是否有可能 'member function pointer' 指向同一类中的成员函数

c++ - 循环依赖和函数

c++ - 具有模板化类型的模板特化