【发布时间】:2013-02-17 15:13:27
【问题描述】:
假设我想创建一个不可修改的链表(即它只能被遍历,一旦它最初创建就不能添加或删除节点)。这可以通过以下方式轻松实现:
struct ListNode
{
int value;
ListNode* nextNode;
}
我的问题是......是否可以使用引用而不是指针?
struct ListNodeWithRefs
{
int value;
ListNodeWithRefs &nextNode;
}
我不确定它是否会提供任何性能提升,但是...这个问题在编码时弹出,到目前为止我的答案是否,但我可能会遗漏一些东西。
原则上,没有什么可以阻止您使用引用,并像这样构造列表元素:
ListNodeWithRefs::ListNodeWithRefs(ListNodeWithRefs &next):
nextNode(next)
{}
但是存在先有鸡还是先有蛋的问题,因为next 还强制其next 元素在其创建时存在等等......
注意:我认为我的问题也可以应用于将列表定义为:
struct ListNodeConst
{
int value;
const ListNode* nextNode;
}
【问题讨论】:
-
只有尝试在列表头部旁边的任何位置插入节点时才会出现问题。
-
你将如何表示最终节点?引用不能为 NULL。
-
正如@Vlad 所说,引用的问题是您需要一个最终对象。好消息是,原则上,您仍然可以拥有一个循环列表。如果你有它的用途。
标签: c++ data-structures reference linked-list