5
#define TAILQ_ENTRY(type)                       \
struct {                                \
    struct type *tqe_next;  /* next element */          \
    struct type **tqe_prev; /* address of previous next element */  \
}

我发现上面的代码使用了指向指针的指针,这不是唯一的。我想知道为什么要这样做?指针本身不能处理吗?

4

1 回答 1

5

我想这里的重点是删除元素。考虑到您有一个单链表,这意味着您可以在其节点中向前导航。

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

换句话说,在伪代码术语中,以下情况成立

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

或者

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

.

于 2012-11-18T08:14:07.777 回答