2012-11-18 133 views
5
#define TAILQ_ENTRY(type)      \ 
struct {        \ 
    struct type *tqe_next; /* next element */   \ 
    struct type **tqe_prev; /* address of previous next element */ \ 
} 

我发现上面的代码使用指针指针,这不是唯一的一个。我想知道为什么这样做?指针本身无法处理它?为什么Linux使用这个“指向指针”的列表?

回答

5

我想这里的重点是删除元素。考虑你有一个singly linked list,这意味着你能够转发导航其整个节点。

现在考虑一个你想要删除的通用列表节点(比如说N_j)。删除之后,您想要轻松链接上一个节点(说N_{j-1})到下一个(说N_{j+1})。因此,您需要修改前一个节点N_{j-1}的字段tqe_next,该字段需要指向它的指针,即指针指向tqe_prevN_j

换句话说,在伪代码而言,下式成立

*(N_j.tqe_prev) == (N_{j-1}).tqe_next 

N_j.tqe_prev == &(N_{j-1}).tqe_next 

+0

@Tom薛,我进一步改进了我的答案。请看一看。 – Acorbe

+0

谢谢!现在很清楚。 –

相关问题