数据结构:
struact node {
struct node * next;
// other members
};
struct node_head {
struct node *head;
struct node **tail; // 注意这里的二重指针
};
// init
static struct node_head g_head;
g_head.head = null;
g_head.tail = &(g_head.head);
void mlist_add(struct node_head *phead, struct node *node)
{
node->next = null;
*(phead->tail) = node;
phead->tail = &node->next;
}
如上面示例代码,该方法在内核中使用较为普遍。原理就是通过维护一个头结点,来分别指向单链表的头部和尾部指针,方便在尾部插入新结点而避免遍历查找尾指针。
另外,单链表通常采用头插法来避免遍历。
阅读(3061) | 评论(0) | 转发(0) |