c - 链表哨兵节点以避免将指针重新分配给第一个节点

标签 c linked-list

理论

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

背景

Libevent: how to close all open sockets on shutdown?

情况

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

我的第一个想法是:

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

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

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

问题

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

最佳答案

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

关于c - 链表哨兵节点以避免将指针重新分配给第一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21830694/

相关文章:

c - 需要有关 C 中函数 scanf 的帮助

c - 递归关系: find bit strings of length seven contain two consecutive 0 in C

c - AVR Controller ,按钮问题

c++ - 在 C++ 的链接列表方法中,如何将参数默认为其最后一个索引?

c - 双向链表C,在特定位置插入

c++链接列表不起作用

c - 当服务器的 child 关闭套接字时

c++ - 从 C 转换为 C++ 后对共享库函数的 undefined reference

C++链表程序读取字符串

C - 为什么我不能读取模块中的链接列表并返回 main 中的 header ?