zoukankan      html  css  js  c++  java
  • 双向链表插入节点

    双向链表插入节点

    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,那么一切又都变化了,所以重在理解吧。

  • 相关阅读:
    用c#开发微信 (7) 微渠道
    Swift语言精要
    Android开发点滴
    UITableViewAutomaticDimension
    iOS中ActionSheet和Alert的区别
    本博客申明
    iOS中重用UITableView单元格时,千万别忘了这个
    Swift 2 语言精要
    Objective-C中NSString与int和float的相互转换
    Android Studio常用快捷键
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7512789.html
Copyright © 2011-2022 走看看