如题:
分析:
其实自己已经画出图来,并且按照已经掌握的操作逻辑,写了一遍,但一对下面的选项能对的也就一两个,有的可能一个都对不上!再对正确答案才不仅要问,这种题到底该如何思考呢?其实这些都在书中已经明确了,只是自己没有掌握
解决:
1.双向链表p结点后插入s?
看书上的图:如下:
一共分了四步:
- s->prior=p;//对应的选项是 D s是一个指针,指向一个结构体,s->prior指的是结构体里的prior指针,表示前趋指针,因为插入前,这个指针没有所指。
- s->next=p->next;//对应的选项是 I p->next,插入前就已经有所指了,并且是在等号右面,所以直接就是后继ai+1
- p->next->prior=s;//对应是G,p->next->prior在等号左面,所以还是指针只不过是p->next里的prior前趋指针,也就是ai+1的前趋指针
- p->next=s;//对应A
规律:和给出的答案IGAD,不太一样,但链表插入操作先操作插入位置后结点的特点是不能打乱的,同时双链表独有的特点是先操作s后继指针也不能打乱。
2.p结点前插入s?
如图:
一共分了四步:
- s->prior=p->prior;//对应的选项是 N
- s->next=p;//对应的选项是 C
- p->prior->next=s;//对应是H
- p->prior=s;//对应B
和给出的答案CNHB,不太一样,还是符合上面总结出的规律
3.先看第(5)问删除p??
如图:
分了两步:
-
p->prior->next=p->next;//对应O
-
p->next->prior=p->prior;//对应R
和给出的答案ORL,一样,多了个释放结点操作。还是符合先操作后继结点的规律
4.删除p的直接后继??
如图: -
p->next->next->prior=p;//对应的是Q
-
p->next=p->next->next,//对应的是E
和给出的答案JQEM,很不一样,j:q=p->next 先使q指向ai+1,很严谨,因为题目其实是没给q指针的,这里定义了下。
5.删除p的直接前趋??
如图: -
p->prior->prior->next=p;/对应的是P
-
p->prior=p->prior->prior;//对应的是F
和给出的答案KPFM,注意到删除前趋与删除本身是差不多的操作,但删除后继,是先操作的要删除结点的前趋,其实也可以是先操作后继,顺序不影响删除效果。
是先操作的要删除结点的前趋,其实也可以是先操作后继,顺序不影响删除效果。