Hash 哈希表函数hlist_add_before在Linxu内核中的实现

Hash 哈希表函数hlist_add_before在Linxu内核中的实现,hash,linux-kernel,Hash,Linux Kernel,在linux内核中,哈希表函数hlist_add_before的实现如下: struct hlist_node { struct hlist_node *next, **pprev; }; /* * This function is to add n before next */ static inline void hlist_add_before(struct hlist_node *n, struct hlist_node *next) { n->pprev

在linux内核中,哈希表函数hlist_add_before的实现如下:

struct hlist_node {
    struct hlist_node *next, **pprev;
};

/*
 * This function is to add n before next
 */

static inline void hlist_add_before(struct hlist_node *n, struct hlist_node *next)
{
    n->pprev = next->pprev;
    n->next = next;
    next->pprev = &n->next;
    *(n->pprev) = n;
}
我对函数中的最后一行
*(n->pprev)=n
感到困惑。 我认为只有前三行就足够了。 最后一行怎么会在那里

我终于拿到了。 只需将最后一块拼图拼块放回原处即可。 在这个哈希列表函数中,它必须处理一个三角形关系。 首先,切断原来的粘合,然后将新的粘合插入其中。 第三,建立新课程与课程前后的联系。
*(n->pprev)
是指向下一个节点的指针。以前是node next,现在是n。 前两行用于节点“n”。 第三行是节点“next”。 第四行表示n前面的节点。 有四行将整个列表连接在一起