需求是从单向链表中删除一个指定节点。
教科书上的(普通的)写法:
void remove_cs101(list *l, list_item *target)
{
list_item *cur = l->head, *prev = NULL;
while (cur != target) {
prev = cur;
cur = cur->next;
}
if (prev)
prev->next = cur->next;
else
l->head = cur->next;
}
优雅的(有品味的)写法:
void remove_elegant(list *l, list_item *target)
{
list_item **p = &l->head;
while (*p != target)
p = &(*p)->next;
*p = target->next;
}
目测充分利用的指针的特性,代码量少了不少。
代码仓库和详细解释在这里: https://github.com/mkirchner/linked-list-good-taste/blob/main/README.md