双向链表的相关知识
1.头节点
也叫哨兵位,此节点里面存放的数据无效不用的但存放的指针依旧是有用的
2.链表的特点
单链表:没有头节点单向不循环
双向链表:有头节点双向循环 (如图)
3.节点的结构
4.节点的开辟内存创建
node->next = node->prev = node:
- 双向链表是双向循环的,所以里面创建申请的单位基本节点是双向自循环的
- (单链表是单向不循环的,所以里面的单位基本节点里面:next->NULL)
双向链表的实现
一、初始化
双向链表的初始化即把空的双向链表创建出一个最初的头节点哨兵位,此时头节点不存放有效数据且指针自己指向自己
二、尾插
1.修改时,我们先修改新插入的节点里的指针(prev、next),再修改phead->prev节点的指针(next),再修改phead节点里的指针(prev),即新节点里的前后指针->尾节点的后指针->头节点的前指针
2.哨兵位的下一个节点是第一个有效的节点,哨兵位的前一个节点是最后一个有效的节点
尾插是将节点插到哨兵位的前面
头插是将节点插到哨兵位的后面
三、头插
四、节点查找
五、指定节点之后插入节点
六、尾删
七、头删
八、指定节点删除
九、数据打印
十、销毁