双链表删除后继

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;