单选题 双向循环链表中,在p所指向的结点之后插入s指向的结点,其修改指针的操作是______,其中p指向的不是最后一个结点。
  • A.p->next=s;s->prey=p;p->next->prev=s;s->next=p->next;
  • B.p->next->prev=s;p->next=s;s->prev=p;s->next=p->next;
  • C.s->prev=p;s->next=p->next;p->next=s;p->next->prev=s;
  • D.s->prev=p;s->next=p->next;p->next->prev=s;p->next=s;
【正确答案】 D
【答案解析】[解析] 其插入方法如图所示。 一般情况下,做此类题的一个捷径是判断代码“p->next=s”后是否还有通过指针“p->next”访问p以前的直接后继的引用,有则错误。因为一旦执行完代码“p->next=s”,p的直接后继就更改为s,此后“p->next”不再是p以前的直接后继。例如,试题中A、B和C选项均在“p->next=s”之后使用了“p->next”,所以选项A、B和C错误,根据排除法,选项D正确。另外,建议考生在编写插入代码时,将“p->next=s”写成插入算法的最后一步。 [*]