【发布时间】:2019-05-14 20:18:48
【问题描述】:
我是一个学习c++的初学者,目前正在制作一个单链表。我遇到了一些问题,我想了很长时间,搜索了很多,但仍然没有这个代码的答案,所以我乞求一些帮助..
这是我的linked.h
template <class T>
class Node {
public:
T data;
Node<T>* next;
};
template <class T>
class List {
private:
Node<T> *head;
public:
List() : head(NULL) {};
~List() {
Node<T>* ptr, tmp;
for(ptr = head->next; ptr == NULL; ptr = head->next) {
delete ptr;
}
}
List(T* arr, int n_nodes) {
head = NULL;
Node<T> *tmp = head;
for(int i = 0; i < n_nodes; i++) {
Node<T>* node = new Node<T>;
node->data = arr[i];
if(head == NULL) {
head->next = node;
tmp = node;
}
else {
tmp->next = node;
node->next = NULL;
tmp = node;
}
}
}
friend std::ostream& operator<<(std::ostream& out, List<T>& rhs) {
Node<T>* cur = rhs.head;
out << cur;
while(cur != NULL) {
if(cur->next != NULL) {
out << cur->data << ", ";
cur = cur->next;
}
else
out << cur->data << " ";
}
return out;
}
};
这是我的 main.cc 文件。
#include <iostream>
#include "linked.h"
int main() {
int array[5] = {12, 7, 9, 21, 13};
List<int> li(array, 5);
std::cout << li;
return 0;
}
我在运行构造函数时不断出现分段错误,但我不明白为什么。我在哪里犯错?任何帮助将不胜感激!
【问题讨论】:
-
第一个跳出来的明显错误是:
if(head == NULL) { head->next = node; ... -
为什么这是一个错误?我写了这段代码,因为只有在 head 和 node 之间建立的第一个链接应该是这样,其他的应该以其他方式放置。
-
想一想:如果
head是NULL,那么当您尝试将某些内容分配给head->next时会发生什么? -
head->next对 Erica 意味着什么? -
|数据 |下一个 |说如果这是头,
head->next将表示它链接到的内容,即下一个节点。但是head不会被初始化为NULL吗?
标签: c++ list linked-list singly-linked-list