微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

__list_add 与 linux 链表中的 list_add

如何解决__list_add 与 linux 链表中的 list_add

我很难理解 __list_addlist_add 的工作原理?我确实在这里阅读了一些答案,但不能很好地理解。我已经在附件中提出了我的问题......请看一下并给我建议吗?

谢谢

enter image description here

解决方法

/Users/[]/.cache/pre-commit/repo180cws4u/bin/python install -m six 内联函数合并到 __list_add 的主体中会产生以下等效项:

list_add

这将在 static inline list_add(struct list_head *head,struct list_head *new) { head->next->prev = new; new->next = head->next; new->prev = head; head->next = new; } new 之间插入 head 条目。通常,head->next 指向双向链表的控制节点,head 是要添加到双向链表前面的条目。

原始状态:

new

[oldheadprev] [head] [oldheadnext] next ------> next -------------------------> next prev <------ prev <------------------------- prev [new] next prev 之后:

head->next->prev = new;

[oldheadprev] [head] [oldheadnext] next ------> next -------------------------> next prev <------ prev,- prev / [new] / next / prev <--' 之后:

new->next = head->next;

[oldheadprev] [head] [oldheadnext] next ------> next -------------------->,--> next prev <------ prev /,- prev / / [new] / / next -' / prev <--' 之后:

new->prev = head;

[oldheadprev] [head] [oldheadnext] next ------> next -------------------->,--> next prev <------ prev <-,/,- prev \ / / \ [new] / / \ next -' / `---- prev <--' 之后:

head->next = new;

即使列表为空,代码也能工作。在空列表中,控制节点 ([oldheadprev] [head] [oldheadnext] next ------> next ----,\ /,- prev \ \ / / \ \ [new] / / \ `-> next -' / `---- prev <--' ) 的 nextprev 指针指向自身:head

原始空列表状态:

head->next = head; head->prev = head;

[head] [new],---> next -----,next |,- prev <-,| prev | `---------' | `---------------' 之后:

head->next->prev = new;

[head] [new],- prev | prev <-,| `------------|---------------' `---------------' 之后:

new->next = head->next;

[head] [new],->,next -----,| |,| | | `------------|---------------' | | `---------------' | `--------------------------------------' 之后:

new->prev = head;

[head] [new],- prev <----|------- prev <-,| | | `------------|---------------' | | `---------------' | `--------------------------------------' 之后:

head->next = new;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。