我们可以通过使用head的简单变量而不是head的指针来实现不使用head指针的链接列表吗?
答案 0 :(得分:2)
是的。如果要使用前哨节点实现循环链表,则前哨节点可以是也可以用作头部的简单变量。
或者,您可以使用std::optional
实例作为头部。
答案 1 :(得分:1)
在某些情况下,您可以,但通常情况下不行。而你为什么要呢?我现在可以想到一些原因。以下面的代码为例:
template<class T>
class Node
{
private:
T value;
Node<T> *next;
};
class MyLinkedList
{
private:
bool isEmpty; // indicates wether the list is empty or not
Node head; // Head as member
};
但是此代码有几个主要缺陷:
isEmpty
head
没有默认构造函数,则无法初始化T
Node::value
的析构函数将被调用两次不知道这些是否全部都是原因,但我认为,仅#2就足以解决这个问题。
您当然可以使用std::optional,,但这只是带有包装的指针。即使没有默认构造函数,它也可以工作,因此可以选择。尽管它的使用方式与(智能)指针相同,所以它不是“头部的简单变量” 。