单链表删除:prev、target、改链、释放

1. 找到前驱 prev

删除第 3 个数据结点时,先让 prev 停在第 2 个数据结点。

next
a1next
a2next
a3next
prev
LNode *prev = head;
while (prev != NULL && position < index - 1) {
    prev = prev->next;
    position++;
}

2. 保存 target

target = prev->next,否则改链后就找不到要释放的结点。

a1next
a2next
a3next
a4NULL
prev
target
LNode *target = prev->next;
*deletedValue = target->data;

3. prev 跳过 target

prev->next 指向 target->next,链表中逻辑删除目标结点。

a2next
a3next
a4NULL
prev->next = target->next;

4. 释放 target

改链之后释放目标结点,顺序不能反。

a2next
a4NULL
free(target);