双链表比单链表方便寻找上一个结点,所以双链表插入步骤会相对单链表较多
双链表的结点结构比单链表多一个指向前一个结点的指针
双链表结构
双链表的初始化
双链表的插入
先进行插入准备
判误解释:!dl:双链表初始化失败 n<-1:头插为-1尾插为1任意位置插入(除开1和-1),如果n<-1不符合插入要求 n>dl->num+1:dl->num为双链表中结点数量,要插入的位置比原先已有结点数量多一个是可以插入【如图】
该双链表中一共有6个结点插入到7的话刚好是尾插
如果双链表中为空,直接插入就可以了
头插
步骤1和步骤2可以调换不会影响代码,因为可以通过pre指针找到前一个结点
尾插
尾插的话一定要找到最后一个结点,定义一个临时结点遍历到最后一个结点位置
任意位置插入
任意位置插入一定要找到要插入位置的前一个结点【cur是尾插时定义的临时结点,因为没有定义到if语句里所以在该函数内可以使用】
双链表删除
箭头为要删除的位置
删除和任意插入一样要找到要删除位置的前一个结点
双链表的遍历
需要借用临时结点一直遍历到链表最后一个结点
代码运行结果
全部代码