首页 > 试题广场 >

在一个双向循环链表中,指针p所指向的节点(非尾节点)之后插入

[单选题]
在一个双向循环链表中,指针p所指向的节点(非尾节点)之后插入指针s指向的节点,其修改指针的操作是
  • p->next=s; s->prev=p; p->next->prev=s; s->next=p->next;
  • p->next->prev=s; p->next=s; s->prev=p; s->next=p->next;
  • p->next->prev=s; s->prev=p; p->next=s; s->next=p->next;
  • s->prev=p; s->next=p->next; p->next=s; p->next->prev=s ;
  • s->prev=p; s->next=p->next; p->next->prev=s; p->next=s;
  • s->next =p->next;s->prev=p; p->next=s;p->next->prev=s;
推荐
答案:E
答案A,B,C都先断开了链表,导致后续(或前续)节点丢失
答案D和F中的p->next=s;在更新s->next之前,导致原链表中p->next丢失
编辑于 2015-02-06 16:08:28 回复(1)
mark。注意先p->next->prev = s,再是p->next = s;否则链表会断开。
发表于 2017-01-17 10:24:02 回复(0)

插入一个节点的时候,要先把待插入节点的前后先安排好,具体就表现为s->prev=...,s->next=...。然后把安排好的节点与队列中已有的节点进行关联。注意D和E的区别,如果先安排p->next=s,那么s即为当前p的下一节点了,就不是插入了。。。
注意插入,删除都不能打断链表。

发表于 2017-04-25 22:14:50 回复(0)
插入方法:先将S的前驱以及后继分别指向了P以及P的后继之后,才能去改变P后继的前驱,P的后继所指向的结点。(保证双向链表不会断开链表)
1)s->prev=p;          //s的前驱指向了P s->next
2)s->next=p->next;//s的后继指向P的后继    1).2)步骤之后链表不会断开
3)p->next->pre=s;  //P的后继的前驱所指向的结点
4)p->next=s;          //改变P的后继
编辑于 2018-01-21 10:16:27 回复(1)
p->next->prev=s   s->next=p->next   p->next=s   s->prev=p    应该也行吧
发表于 2019-04-27 13:08:42 回复(0)
可以把前后语句带进去看一下,看是否又绕回到自己,链表是不能断的
发表于 2018-06-04 16:24:12 回复(0)
首先不能断开链表,其次是两次pre,两次next
发表于 2017-07-05 07:15:24 回复(0)
 p->next->prev    这一后以前还不是自己本身吗?
发表于 2016-07-29 22:22:11 回复(1)
要注意先后,不能让结点的指代关系丢失,而不能正确变换指针的关系。
发表于 2016-05-24 16:48:59 回复(0)
不能先断开了链表,导致后续(或前续)节点丢失
发表于 2015-03-14 21:40:07 回复(0)