题目
【单选题】在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是()。A. p→next=q; q→prior=p; p→next→prior=q; q→next=q;B. p→next=q; p→next→prior=q; q→prior=p; q→next=p→next;C. q→prior=p; q→next=p→next; p→next→prior=q; p→next=q;D. q→prior=p; q→next=p→next; p→next=q; p→next→prior=q;
【单选题】在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是()。
A. p→next=q; q→prior=p; p→next→prior=q; q→next=q;
B. p→next=q; p→next→prior=q; q→prior=p; q→next=p→next;
C. q→prior=p; q→next=p→next; p→next→prior=q; p→next=q;
D. q→prior=p; q→next=p→next; p→next=q; p→next→prior=q;
题目解答
答案
D. q→prior=p; q→next=p→next; p→next=q; p→next→prior=q;
解析
双向循环链表的插入操作需要确保新节点的前后指针正确连接,并更新相邻节点的指针。核心思路是:
- 新节点q的prior指向p(作为p的后继);
- 新节点q的next指向p原来的后继节点;
- p的next指向q;
- 原p的后继节点的prior指向q。
关键点是确保所有相关指针的修改顺序正确,避免链表断裂或循环。
选项分析
选项D
- q→prior = p:将q的前驱设为p,使其成为p的后继。
- q→next = p→next:将q的后继设为p原来的后继节点。
- p→next = q:将p的后继改为q。
- p→next→prior = q:此时p的后继是q,因此q的后继节点的前驱应指向q。
逻辑正确,所有指针修改顺序合理,链表结构完整。
其他选项问题
- 选项A:重复修改
p→next→prior,且未正确连接q的next。 - 选项B:
p→next→prior = q未在正确位置执行。 - 选项C:
p→next→prior = q和p→next = q顺序错误,可能导致链表断裂。