题35

题目

[!error]+
Q:【2023 统考真题】现有非空双向链表 ,其结点结构为 prev | data | next ,prev 是指向直接前驱结点的指针,next 是指向直接后继结点的指针. 若要在 中指针 所指向的结点(非尾结点)之后插入指针 指向的新结点,则在执行语句序列

s->next = p->next;
p->next = s;

后,下列语句序列中还需要执行的是 ( ).
A. s->next->prev=p; s->prev=p;
B. p->next->prev=s; s->prev=p;
C. s->prev=s->next->prev; s->next->prev=s;
D. p->next->prev=s->prev; s->next->prev=p;

分析

[!NOTE]+
A:需要注意的是,D选项里,执行完题目里的步骤以后,p去到后继的链接已经断掉了

[!done]+
题02
C
链表的插入操作要保证不会造成断链, 画图再依次判断选项。执行完语句

①s->next=p->next;
②p->next=s;

后的结构如下图所示 (虚线表示 prev, 实线表示 next)。
对于 A,s->next->prev = p;,错误。
对于 B,p->next-prev=s,让 的 prev 指向 , 错误。
对于 ,两句代码均错误。
对于 ,执行完语句

③s->prev=s->next->prev;
④s->next->prev=s;

后的结构如下图所示, 满足插入的要求。