我正在尝试使用节点类和指向下一个节点的指针在C ++中实现链接列表类。
template<class T>
class Node {
public: T val;
public: Node* next;
public: Node() { }
public: Node(T val) { this.val = val; }
};
我创建了一个链接列表类,它具有指向头部的指针和一个附加函数以将节点添加到列表中:
template<class T>
class LinkedList {
private: Node<T>* head;
public: LinkedList() { }
public: LinkedList(T val) { head -> val = val; }
public: void append(T val) {
Node<T>* temp = head;
while(temp -> val != NULL) {
temp = temp -> next;
}
temp -> val = val;
}
};
但是在编译和运行后,它将引发此错误“分段错误(内核已转储)”
我对分段错误有点了解,例如尝试访问不再存在的内存位置,但是在此示例中我没有得到它,没有任何帮助吗?
主要问题是您没有使用空指针初始化下一个指针,但是您假设它是空指针。解决方法如下:
template <class T>
class Node {
public:
T val;
Node* next;
Node(T val_ = T{})
: val{val_}
, next{nullptr}
{ }
};