micheal1 发表于 2017-4-4 22:14:36

一个双向链表的问题

在一个双向循环链表中,指针p所指向的节点(非尾节点)之后插入指针s指向的节点
我是不太明白顺序,看解析说顺序不对会断开链表,谁可以给我具体说说吗

s->pre = p;
s->next = p->next;
p->next->pre = s;
p->next = s;

lumber2388779 发表于 2017-4-4 22:48:38

假定原先p的下一个结点是x 那么p->next == x , x->pre == p
第一句s->pre = p; 这一句不难理解吧 把新插入的结点 的pre指针指向p
第二句s->next = p->next; 因为s是要插入p和x中间,那么s的next指针肯定是指向x 因为p->next == x 所以s->next=x,因为这个时候x结点时未知状态 所以使用p->next代替
第三句p->next->pre = s; 因为p->next == x , x->pre == p那么相当于 x的pre指针原先指向p,现在指向新结点s,这个时候就完成了s结点与x结点的联系,这个时候剩下p的next结点还是指向x因此就有了第4句
这样解释能懂不?
建议画图很容易就能理解的{:10_256:}{:10_256:}加油

micheal1 发表于 2017-4-4 23:01:41

lumber2388779 发表于 2017-4-4 22:48
假定原先p的下一个结点是x 那么p->next == x , x->pre == p
第一句s->pre = p; 这一句不难理解吧 把新插入 ...

我自己琢磨了一下知道了,看来还是no pic say a jb啊

lumber2388779 发表于 2017-4-4 23:16:52

micheal1 发表于 2017-4-4 23:01
我自己琢磨了一下知道了,看来还是no pic say a jb啊

{:10_256:}{:10_256:}需要我画给你吗

micheal1 发表于 2017-4-5 12:33:47

lumber2388779 发表于 2017-4-4 23:16
需要我画给你吗

不不不   知道版主流弊
页: [1]
查看完整版本: 一个双向链表的问题