双向链表插入节点

双向链表插入节点

1、根据实例分析

2、把节点之间的关系看成 是边的拆除和重建

3、为了方便叙述,给边标了号

如图所示是我们要操作的结构体和在双向链表的图。

现在我们的目的就是在ab节点之间插入x节点。

现在我把这六条线都遍上号:

在插入之前,2,6这两条边是存在的,这两条边就是:

在插入之后,2,6这两条边不存在了,存在的边为4,1,3,5,这四条边就是:

所以要想实现在a,b节点中插入x节点,也就是实现

 

在这个图中,1和6是同一条边,都是a->next,3和2是同一条边,都是b->pre.

现在我们是通过p指针在这个双休链表中找到了b节点,也就是p==b的,并且我们有一个x节点是待插入的。

在这种情况下,我们找a节点就只能通过p节点,p->pre就代表a。

显然2这条边就是p->pre,所以我们要想找到a节点,就必须有2这条边。

而1,4两条边的操作都和a节点有关。

所以我们要想操作1,4两条边,就必须有a节点,也就是2这条边。

5这条边的插入顺序很自由,因为我们的x节点和p节点都是已知的。

所以我们的一个插入顺序为这样:

1、先拆第6条边,接上第一条边:

2、然后接上第4条边:

3、然后接上第5条边:

4、最后拆除第二条边接上第三条边:

 大工告成。

说一句,这个循序不是唯一的,比如说5这条边我可以在任意时候插入。

并且如果p节点现在不是指向b,而是指向a,那么一切又都变化了,所以重在理解吧。

原文地址:https://www.cnblogs.com/Renyi-Fan/p/7512789.html