双链表删除后继
1. 保存 target
删除 prev 的后继时,先用 target 保存被删结点。
priorprevnext
priortargetnext
priornextnext
DNode *target = prev->next;
2. prev 跳过 target
让 prev->next 指向 target 的后继,正向链先接好。
priorprevnext
priortargetnext
priornextnext
prev->next = target->next;
3. 后继的 prior 改回 prev
如果 target 不是尾结点,还要修正后继结点的前驱指针。
priorprevnext
priornextnext
if (target->next != NULL) {
target->next->prior = prev;
}
4. 释放 target
双向链路已经绕过目标结点后,再释放目标结点。
free(target);
return true;