题目
【单选题】在双向链表存储结构中,删除 p 所指的结点时须修改指针()。A. p -> next -> prior=p -> prior; p -> prior -> next=p -> next;B. p -> next=p -> next -> next; p -> next -> prior=p;C. p -> prior -> next=p; p -> prior=p -> prior -> prior;D. p -> prior=p -> next -> next; p -> next=p -> prior -> prior;
【单选题】在双向链表存储结构中,删除 p 所指的结点时须修改指针()。
A. p -> next -> prior=p -> prior; p -> prior -> next=p -> next;
B. p -> next=p -> next -> next; p -> next -> prior=p;
C. p -> prior -> next=p; p -> prior=p -> prior -> prior;
D. p -> prior=p -> next -> next; p -> next=p -> prior -> prior;
题目解答
答案
A. p -> next -> prior=p -> prior; p -> prior -> next=p -> next;
解析
双向链表的每个节点包含prior(前驱指针)和next(后继指针)。删除节点p时,需确保其前驱节点的next和后继节点的prior正确连接,从而跳过p。关键操作是:
- 前驱节点的
next指向p的后继节点; - 后继节点的
prior指向p的前驱节点。
选项分析
选项A
p->next->prior = p->prior;
p->prior->next = p->next;
- 第一步:将
p的后继节点的prior指向p的前驱节点,确保后继节点的前驱正确。 - 第二步:将
p的前驱节点的next指向p的后继节点,确保前驱节点的后继正确。 - 操作正确,符合双向链表删除逻辑。
选项B
p->next = p->next->next;
p->next->prior = p;
- 第一步:错误地修改
p的next指针,导致跳过p的后继节点,破坏链表结构。 - 第二步:尝试调整后继节点的
prior,但未正确连接前后节点。 - 操作错误。
选项C
p->prior->next = p;
p->prior = p->prior->prior;
- 第一步:错误地让前驱节点的
next仍指向p,未跳过p。 - 第二步:错误地修改
p的prior指针,导致链表断裂。 - 操作错误。
选项D
p->prior = p->next->next;
p->next = p->prior->prior;
- 两步操作均未正确连接前后节点,且指针修改逻辑混乱。
- 操作错误。