链表前哨节点,以避免将指针重新分配给第一个节点

Posted

技术标签:

【中文标题】链表前哨节点,以避免将指针重新分配给第一个节点【英文标题】:Linked List sentinel node to avoid reassigning pointer to first node 【发布时间】:2014-03-16 20:15:47 【问题描述】:

理论

从链表中删除节点时,如果要从链表中删除的节点是第一个节点,则需要更新指向链表中第一个节点的指针。

背景

Libevent: how to close all open sockets on shutdown?

情况

在我的服务器应用程序中,指向套接字连接链表中第一个节点的指针保存在一个结构中,该结构保存与正在运行的实例的上下文相关的数据,例如侦听套接字端口等。当连接关闭时,链表中的相关节点必须被删除,这意味着删除节点的函数也必须访问实例上下文结构体。

我的第一个想法是:

链表中的每个连接节点都有一个指向实例上下文结构的指针。 (凌乱。)

指向实例上下文结构的全局变量指针。 (邪恶)

然后我有了将链表中的第一个节点设为sentinel node 的想法,从而避免第一个节点被删除的可能性,从而回避了套接字关闭函数访问实例上下文。

问题

这是对哨兵节点的合适使用还是有更好的方法来解决这个问题?

【问题讨论】:

简单地实现你的想法会很有帮助。也许在codereview.stackexchange.com 上发帖 想法:1)是的,哨兵想法可以工作 2)仍然需要一个特殊的 delete() 来删除链表和哨兵节点。 3) 使用这种技术的代码应该有 high 百分比的空列表是空间效率低下的。 【参考方案1】:

是否有任何关于您想要存储的链表的元数据,例如链表的长度?如果是这样,您可以将它们存储在哨兵节点中。

【讨论】:

以上是关于链表前哨节点,以避免将指针重新分配给第一个节点的主要内容,如果未能解决你的问题,请参考以下文章

C - 链表 - 如何分配和遍历列表

链表与指针

单链表

链表:单向链表

剑指offer24-复杂链表的复制

剑指offer24-复杂链表的复制