我正在尝试实现一个基本的单链表。在那里,我试图从头部插入。然后我尝试打印插入的数据。我的代码如下:
#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/