理论
从链表中删除节点时,如果从列表中删除的节点是第一个节点,则需要更新指向列表中第一个节点的指针。
背景
Libevent: how to close all open sockets on shutdown?
情况
在我的服务器应用程序中,指向套接字连接链表中第一个节点的指针保存在一个结构中,该结构包含与正在运行的实例的上下文相关的数据,例如监听套接字端口等。当连接关闭时,链表中的相关节点必须被删除,这意味着删除节点的函数也必须访问实例上下文结构。
我的第一个想法是:
链表中的每个连接节点都有一个指向实例上下文结构的指针。 (凌乱。)
指向实例上下文结构的全局变量指针。 (邪恶。)
然后我有了想法,让链表中的第一个节点成为sentinel node从而避免了第一个节点被删除的可能性,从而避免了套接字关闭函数访问实例上下文的需要。
问题
这是哨兵节点的合适使用还是有更好的方法来解决这个问题?
最佳答案
是否有关于您要存储的链接列表的任何元数据,例如列表的长度?如果是这样,您可以将它们存储在哨兵节点中。
关于c - 链表哨兵节点以避免将指针重新分配给第一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21830694/