我正在尝试实现链接列表。
列表有私有变量* head,* tail,count。
我理解数据结构中的逻辑,但不可否认我是C ++的新手,所以我觉得我可能错误地使用了构造函数。
* head和* tail是列表节点指针。列表节点然后有指向上一个和下一个(双链表)的指针。
这是我试过的:
List::List():head(), tail(), count(0) {
head->previous = NULL;
head->next = tail;
tail->previous = head;
tail->next = NULL;
}
我的程序编译但在尝试使用此构造函数创建新列表时崩溃。有什么建议?
答案 0 :(得分:2)
通常情况下,head
和tail
将为空列表的空指针,因此请将它们解释为:
head->previous = NULL;
将是未定义的行为。
构造函数只是:
List::List() : head(0), tail(0), count(0) {}
(如果你的C ++足够先进,可以nullptr
和head
使用tail
。
如果您在列表的开头和结尾喜欢虚拟节点的人的类型,您需要在尝试使用它们之前分配它们:
List::List() : count(0) {
head = new somethingOrOther();
tail = new somethingOrOther();
head->previous = NULL;
head->next = tail;
tail->previous = head;
tail->next = NULL;
}
这个技巧通常用于大大简化列表插入和删除,因为您无需担心是在最后插入还是在开始时删除。
缺点是列表遍历和搜索节点(包括删除)必须从head->next
开始并以tail->previous
结束,但这通常比担心早期问题更简单。