双链表综合操作代码
目录
1. 结点类型定义
定义双链表结点类型:
prior : 先前的、优先的
2. 初始化双链表
3. 双链表的插入结点操作
后插操作:
前插操作:
在某个结点前面进行前插操作,双链表很容易定位到给定结点的前驱结点,然后再对其前驱结点进行后插操作。这样也实现了前插操作。双链表的插入操作均可以转化为后插操作!!
4. 双链表的删除结点操作
删除结点 p 的后续结点 q
p->next = q->next;
q->next->prior = p;
free(q);
但是这个代码是存在问题的,如果要删除的是最后一个结点,代码将出错!!!
修改如下:
5. 销毁一个双链表
如果我们想销毁一个双链表的话,是不是可以用一个 while 循环,每一次都删除头结点的后继结点,依次释放这些结点占用的空间,直到头结点之后再无其他结点,即表为空了!最后再表头结点占用的空间也释放,头指针指向NULL,这样就销毁了一个双链表!
6. 双链表的遍历
双链表不可随机存取,按位查找、按值查找都只能用遍历方式实现,时间复杂度 O(n)。