链表前哨节点,以避免将指针重新分配给第一个节点
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】:是否有任何关于您想要存储的链表的元数据,例如链表的长度?如果是这样,您可以将它们存储在哨兵节点中。
【讨论】:
以上是关于链表前哨节点,以避免将指针重新分配给第一个节点的主要内容,如果未能解决你的问题,请参考以下文章