双向链表插入节点

双向链表插入节点

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值