Chinaunix首页 | 论坛 | 博客
  • 博客访问: 767346
  • 博文数量: 144
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1150
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-17 14:32
个人简介

小公司研发总监,既当司令也当兵!

文章分类

全部博文(144)

分类: LINUX

2018-06-06 14:27:51

数据结构:
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;
}

如上面示例代码,该方法在内核中使用较为普遍。原理就是通过维护一个头结点,来分别指向单链表的头部和尾部指针,方便在尾部插入新结点而避免遍历查找尾指针。

另外,单链表通常采用头插法来避免遍历。
阅读(3099) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~