1.认识双链表
双链表的全称一般为带哨兵位的双向循环链表,有如下两个优点:
1)哨兵位的存在可以使增、删、查、改等操作的代码实现过程更加统一。
1)单链表无法找到前驱节点,双链表则更加灵活,可以访问前驱和后继节点。
2.代码实现
2.1 创建文件
DoubleLinkedList.h:包含头文件,函数的声明。
DoubleLinkedList.c:函数功能的具体实现过程。
Test.c:测试函数功能的实现。
2.2 创建双链表
DoubleLinkedList.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//使用typedef重命名类型——提高链表的通用性
typedef int SLDataType;
/*本文是实现存储整形数据的顺序表,如果想利用现有的顺序表代码逻辑存储其他数据,
只需要将这里的int改为对应的数据类型名称,而不需要去具体过程中更改*/
//定义双向链表中节点的结构
typedef struct ListNode
{
LTDataType data;
struct ListNode* prev;
struct ListNode* next;
}LTNode;
2.3 初始化双链表
双链表是带有哨兵位的,插入数据之前链表中必须要先初始化一个哨兵位。
2.3.1 第一种初始化方式
需要传参,并且因为需要改变哨兵位的指向,所以需要传二级指针,因为哨兵位本身就是一个指针,需要使用指针的指针即二级指针才能在其他函数中修改哨兵位。
Doub