我是一个初学者,正在学习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;
}
我在运行构造函数时不断收到分段错误,但我不知道原因。我犯了什么错误?任何帮助都将不胜感激!
head
是NULL
,那么当你尝试给head->next
赋值时会发生什么? - Paul Rhead->next
对你意味着什么? - YSCNode<T> *tmp = head;
node->data = arr[i];
? - Erica