【发布时间】:2016-11-22 01:04:18
【问题描述】:
我在 C 语言中找到了以下代码片段,它从列表中删除了一个元素
void
remove_ll(struct link_list **head, int key)
{
struct link_list **cur;
for(cur = head; *cur; ) {
struct link_list *entry = *cur;
if (entry->key == key) {
*cur = entry->next;
free(entry);
} else {
cur = &entry->next;
}
}
}
我正在尝试了解它是如何工作的。
这是我的想法。
List example:
0x1f7d018 0x1f7d038 0x1f7d078
+++++++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
|0x2174010: | |0x1f7d070: | |0x1f7d090: |
|key = 10 | |key = 34 | |key = 90 |
|&next = 0x1f7d038|++++>|&next = 0x1f7d078|++++>|&next = NULL |
| | | | | |
+++++++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
After deleting the value 34
0x1f7d018 0x1f7d038
+++++++++++++++++++ +++++++++++++++++++
|0x2174010: | |0x1f7d090: |
|key = 10 | |key = 90 |
|&next = 0x1f7d038|++++>|&next = NULL |
| | | |
+++++++++++++++++++ +++++++++++++++++++
这是对的吗?
最好的问候。
【问题讨论】:
-
运行一下看看。
-
我见过一些可怕的牙套样式,但这个很受欢迎。
标签: c pointers data-structures