链接列表的标记节点,以避免将指针重新分配给第一个节点

时间:2014-02-17 13:43:39

标签: c linked-list

理论

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

背景

Libevent: how to close all open sockets on shutdown?

场合

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

我的第一个想法是:

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

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

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

问题

这是否适合使用标记节点,还是有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

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