我在wayland protocol source code中找到了以下功能。
void
wl_list_insert_list(struct wl_list *list, struct wl_list *other)
{
if (wl_list_empty(other))
return;
other->next->prev = list;
other->prev->next = list->next;
list->next->prev = other->prev;
list->next = other->next;
}
哪个列表具有如下链接:
struct wl_list {
struct wl_list *prev;
struct wl_list *next;
};
它只是一个与其他任何人一样的双重链接列表。
但是我根本不理解这个功能。 对我来说,它看起来像链接'其他'从两个列表中完全丢失,* list和* list-> next链接现在只是交叉到另一个列表。
另外:这不是循环列表。 头尾链接指向自己。[编辑]我的不好,实际上是一个循环列表。这样做有道理。
有谁能帮我理解这个算法的工作原理。 非常感谢。
答案 0 :(得分:1)
我画了照片,然后混乱地盯着他们,直到我意识到魔法。 list
和other
不是节点,它们是列表对象。是的,other
已从"它的节点列表中删除"因为我们要将列表other
的节点添加到列表list
中。函数结束后,other
被完全删除,所有循环链接的节点都链接到list
个节点。