已知有一个链表为双向循环链表的结构(如下),则在q指针指向的结点后面插入一个p结点,需要修改的指针为:
- [A] p->llink=q; p->rlink=q-rlink ; q->rlink=p; q->llink=p;
- [B] p->llink=q; p->rlink=q-rlink ; q->rlink=p; q->rlink->llink=p;
- [C] p->llink=q; p->rlink=q-rlink ; q->rlink=p; p->rlink->llink=p;
- [D] p->llink=q; p->rlink=q-rlink ; q->rlink=p; p->llink->llink=p;
解析:选择C
这里区分B,C的差异:注意到四个选项的前三个指针修改都一样。根据画出结点图进行连接后,一开始会错误的选择B,认为q->rlink->llink=p对的,以为当前p结点后继结点的前驱就是p结点。
但却没有注意到:这里有个指针q->rlink = p,q->rlink指针被修改了。因此q->rlink->llink = p->llink,B选项实际是:p->llink=p,是不成立的。
而C:p->llink实际上有上面的式子:p->rlink=q-rlink,故p->rlink-llink=p 转化为
q->rlink-llink=p,和画出来的连接图一致。
ps:需要注意到指针在连接对应的rlink,llink,需要观察前面是否用到的指针已经被修改了