首页 > 试题广场 >

设指针变量p指向双向链表中结点A,指针变量s指向被插入的结点

[单选题]

设指针变量p指向双向链表中结点A,指针变量s指向被插入的结点X,则在结点A的后面插入结点X的操作序列为()。

  • p->right=s; s->left=p; p->right->left=s; s->right=p->right;
  • s->left=p;s->right=p->right;p->right=s; p->right->left=s;
  • p->right=s; p->right->left=s; s->left=p; s->right=p->right;
  • s->left=p;s->right=p->right;p->right->left=s; p->right=s;
b的错误在先进行了p->right的赋值,导致原来pright的节点无法给其left指针赋值,双向链表断裂,应先给p right的节点left赋值为新节点
发表于 2018-12-26 10:31:35 回复(0)
先修改待插入结点的前驱和后继,再修改原来两个结点中后一个结点的前驱以及前一个结点的后继,可以简单的记为前驱,后继,前驱,后继的修改顺序
发表于 2018-07-02 20:26:11 回复(1)
s->left=p  /*把p赋值给s的前驱*/                               前驱
s->right=p->right /*把p->right赋值给s的后继*/          后继
p->right->left=s  /*把s赋值给p->right的前驱*/           前驱
p->right=s  /*把s赋值给p的后驱*/                              后驱
发表于 2018-12-10 10:41:16 回复(1)
D,因为p->right的操作一定要做在p->right->left之后,要做在之前的话,相当于p->right->left就是对s->left,这样就没能正确的取出插入前p->right->left的指向。至于 s->left=p;s->right=p->right,本人感觉的先后顺序没啥差别,还望大牛指教
发表于 2017-07-11 14:29:00 回复(1)
修改后向指针时,是从右到左的顺序,即先改变新节点的后向指针,再改变给定节点的后向指针。
修改前向指针时,是从左到右的顺序,即先改变新节点的前向指针,再改变后续节点的前向指针。
发表于 2018-12-01 16:01:57 回复(0)
本题值得注意的是:防止断链
发表于 2021-03-27 20:48:41 回复(0)
p->right->left=s s->right=p->right 应该是这样的顺序吧 我的理解,如果是题目的顺序,那么p的后继节点就成s了
编辑于 2024-03-25 16:18:12 回复(0)
D
发表于 2020-03-27 21:09:45 回复(0)