列表连接算法如何工作?

时间:2015-03-20 23:46:42

标签: c list linked-list

我在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链接现在只是交叉到另一个列表。

另外:这不是循环列表。 头尾链接指向自己。[编辑]我的不好,实际上是一个循环列表。这样做有道理。

有谁能帮我理解这个算法的工作原理。 非常感谢。

1 个答案:

答案 0 :(得分:1)

我画了照片,然后混乱地盯着他们,直到我意识到魔法。 listother不是节点,它们是列表对象。是的,other已从"它的节点列表中删除"因为我们要将列表other节点添加到列表list中。函数结束后,other被完全删除,所有循环链接的节点都链接到list个节点。 enter image description here