单链表删除: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);