当前位置: 技术问答>linux和unix
链表操作
来源: 互联网 发布时间:2016-09-30
本文导语: static void __list_splice(struct list_head *list, struct list_head *head) { struct list_head *first = list->next; struct list_head *last = list->prev; struct list_head *at = head->next; first->prev = head; head->next = first; last->next = at; at->prev = l...
static void __list_splice(struct list_head *list,
struct list_head *head)
{
struct list_head *first = list->next;
struct list_head *last = list->prev;
struct list_head *at = head->next;
first->prev = head;
head->next = first;
last->next = at;
at->prev = last;
}
谁能帮我解释下这段代码的意思?不甚感激啊!
|
static void __list_splice(struct list_head *list,
struct list_head *head)
{
struct list_head *first = list->next; //list下一结点
struct list_head *last = list->prev; //list上一结点
struct list_head *at = head->next; //head下一结点
first->prev = head;
head->next = first;//将head插入到list下一结点的上一结点,双向链表
last->next = at;
at->prev = last;//将head的下一结点插入到list上一结点的下一结点,双向链表
}
struct list_head *head)
{
struct list_head *first = list->next; //list下一结点
struct list_head *last = list->prev; //list上一结点
struct list_head *at = head->next; //head下一结点
first->prev = head;
head->next = first;//将head插入到list下一结点的上一结点,双向链表
last->next = at;
at->prev = last;//将head的下一结点插入到list上一结点的下一结点,双向链表
}
|
如果想详细,就去看数据结构的书吧
|
这个是标准的合并函数,把list合并到另一链表的head的后一个位置.双向循环链表
|
first 是指向list的head,而因为是循环链表 所以prev 指向的是list的末尾 也就是说last指向list的tail 以此类推 将两个链表合并
|
将head及下一节点代替list插入到list链表中,原先:list的上一节点--list--list下一个节点
替换后:list的上一节点--head的下一节点--head--list下一个节点。
以上都是双向链表。
替换后:list的上一节点--head的下一节点--head--list下一个节点。
以上都是双向链表。
|
普通的双向循环链表的合并操作
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。