#define TAILQ_ENTRY(type) \
struct { \
struct type *tqe_next; /* next element */ \
struct type **tqe_prev; /* address of previous next element */ \
}
我发现上面的代码使用指向指针的指针,而这不是唯一的代码。我想知道为什么这样做?指针本身无法处理它?</ p>
答案 0 :(得分:5)
我想这里的重点是删除元素。假设您有一个singly linked list,这意味着您可以转发在整个节点中导航。
现在考虑要删除的通用列表节点(比如N_j
)。删除后,您希望轻松将上一个节点(比如N_{j-1}
)链接到 next (比如说N_{j+1}
)。因此,您需要修改前一个节点tqe_next
的字段N_{j-1}
,该字段需要指向它的指针,即{em>指向 tqe_prev
的指针N_j
}}。
换句话说,在伪代码术语中,以下内容为真
*(N_j.tqe_prev) == (N_{j-1}).tqe_next
或
N_j.tqe_prev == &(N_{j-1}).tqe_next