我正在尝试使用节点类和指向下一个节点的指针在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;
}
};
但是在编译并运行后,它会引发此错误“分段错误(核心已转储)”
我对分段错误有一点了解,例如尝试访问不再存在的内存位置,但是在此示例中我没有得到它,没有任何帮助吗?
答案 0 :(得分:1)
主要问题是您不使用空指针初始化下一个指针,但是默认情况下您假设它是空指针。解决方法如下:
multiple
此外,在template <class T>
class Node {
public:
T val;
Node* next;
Node( T val_ = {} )
: val{ val_ }
, next{ nullptr }
{ }
};
中存在问题。这是完全看起来像这样的代码:
append
其他评论:
template <class T>
class Node {
public:
T val;
Node* next;
Node(T val_ = {}) : val{ val_ }, next{ nullptr } {}
};
template <class T>
class LinkedList {
private:
Node<T>* head;
public:
LinkedList(T val_ = {}) : head{ new Node{val_} } {}
void append(T val) {
Node<T>* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = new Node<T>{ val };
}
};
int main() {
LinkedList<int> l;
l.append(10);
}
无法编译,因为this.val
是一个指针。您的意思是this
。this->val
。