首页 > 试题广场 >

在p指针所指向的结点之后插入s指针所指结点的操作应为?

[单选题]
对于双向循环链表,每个结点有两个指针域next和prior,分别指向前驱和后继。在p指针所指向的结点之后插入s指针所指结点的操作应为?
  • p->next = s; p->next ->prior = s;s ->prior = p; s->next = P->next;
  • s->prior = p; s->next = p ->next ; p ->next = s; p->next ->prior = s;
  • p ->next =  s;s ->prior = p; p->next ->prior =s; s ->next = p ->next;
  • s->prior = p; s->next =p->next; p->next ->prior = s; p ->next =  s;
先排除a和c
发表于 2021-03-23 18:19:36 回复(0)
A的问题在于p->next = s;之后p后面的链就断了,之后无法连接上。
B的问题在于p->next ->prior = s;此时p->next已经是s了,所以s->prior=s没有意义。
C的问题在于同A一样。
发表于 2015-09-21 20:09:31 回复(0)
发表于 2016-12-13 16:01:38 回复(2)
链表类的插入,删除等之类就是修改指针的事:
 首先明确需要修改指针有哪些?
 p的next,   s的prior,next, 还有就是s要插入位置的后一个的prior;      最重要的是p->next它是找到p后面的依据,要保证它在被赋值前能得以保存; 因此,s->prior = p;s->next =p->next;s指针得以修改; 然后改变另外两个p->next ->prior = s;p ->next = s这里->就是‘的’的意思。
发表于 2016-04-28 23:30:46 回复(1)
先插入再断链,总结来说就是s->pre=p一定在p->next=s前面;而s->next=p->next一定在p->next->pre=s的前面,查看选项可以知道选项D符合
发表于 2017-06-13 09:54:17 回复(1)
对于双向链表在插入的时候 要对两个指针进行操作,既next 和 prior 指针都要指定到位置
如图上所示 在a b 之间插入c  假设a 为p , c为s 在插入过程中
首先把p的下一个节点链接到s上:s->next = p->next
把p->next->prior 链接到s 上 :p->next->prior = s;
把s链接到p上:p->next = s;
把p链接到s->prior 上:s->prior = p;
具体顺序 看好指针别被覆盖就行。
对于上述选项中:
A:p->next = s; s赋值给p->next , p->next ->prior = s ,p->next就是s  而s-》prior还没确定
B: s->prior = p; s->next = p ->next ; p ->next = s; p->next ->prior = s;跟a一样的问题
C: p ->next = s;s ->prior = p; p->next ->prior =s; s ->next = p ->next;tonga错误一样
希望对你有所帮助

发表于 2016-04-28 15:37:02 回复(0)
链表插入节点的顺序为:
   先操作待插入的节点
   再操作当前节点的下一节点
   最后将待插入节点与当前结点链接

发表于 2016-04-28 14:26:17 回复(0)
题目语句"每个结点有两个指针域next和prior,分别指向前驱和后继"建议改成“ 每个结点有两个指针域prior和next,分别指向前驱和后继”。
发表于 2016-06-02 12:34:59 回复(2)
此题比较简单,直接执行代码,或者画出图就ok

发表于 2018-01-25 12:26:42 回复(1)
<p>这题目说next是前驱就没法了晕</p>
发表于 2020-06-23 21:06:27 回复(0)
每个结点有两个指针域next和prior,分别指向前驱和后继。为啥我读这句话觉得next是前驱,prior是后区呢。p指针指向的节点之后是p之后的呢,还是p节点之后的之后呢。我读不懂
发表于 2022-06-29 19:36:17 回复(0)
就没人发现题目把指针说反了吗?按照next 指后继,prior指前驱我做对了
发表于 2021-03-30 17:08:00 回复(0)
我选择了B,错完了,这里涉及到①p->next和②p->next->prior指向s的顺序问题。 如果先执行①。再执行②,p->next->prior就成了s->prior,即s->prior = s,毫无意义 如果先执行2,就对了
发表于 2021-01-04 15:26:09 回复(0)
先解决要插结点的前驱和后继 再解决后面结点的前驱 最后才是前面结点的后继
发表于 2020-09-04 22:30:16 回复(0)
先插入在断链
发表于 2020-07-22 22:04:27 回复(0)
s->prior=p;     //把p赋值给s的前驱
s->next=p->next;    //把p->next赋值给s的后继
p->next->prior=s;    //把s赋值给p->next的前驱
p->next=s;    //把s赋值给p 的后继
顺序:向搞定插入结点的前驱和后继
            再搞定后结点的前驱
             最后解决前结点的后继

发表于 2020-01-13 20:40:14 回复(0)
题目说分别,那next 就是前指针,没答案,别解释了都
发表于 2017-11-28 15:21:54 回复(0)
每个结点有两个指针域next和prior,分别指向前驱和后继,字面意思不就是next是前驱指针,prior是后继指针吗?
发表于 2017-11-10 09:48:27 回复(0)
记住一点:
p -> next -> prior = s 一定是在 p -> next = s 之前
因为p -> next指针如果改变为s 那之前的next节点就找不到了
发表于 2017-09-23 17:19:59 回复(0)
先插入s,确定s的前驱、后继。再将s连接
发表于 2017-08-20 21:49:38 回复(0)