C语言实现单链表
单链表是数据结构中最基础的链式结构,它不按照线性的顺序存储数据,而是由若干个同一结构类型的“节点”依次串联而成的,即每一个节点里保存着下一个节点的地址(指针)。
上图中,一个表头变量head是用来存储链表首节点的地址,链表中每个节点有data(数据)部分和next(下一个节点的地址)部分组成。链表中的最后一个节点称为表尾,其下一个节点的地址部分的值为NULL。链表的各个节点在内存中可能是不连续存放的,具体存放位置由系统分配。
1、单链表结构定义
// 定义链表节点结构体
typedef struct ListNode {
int data; /* 数据域(存储节点数据) */
struct ListNode* next; /* 指针域(指向下一个节点的指针) */
} ListNode;
定义链表节点结构体struct ListNode,并赋予别名ListNode,故后续代码出现的ListNode可代表struct ListNode。结构体中定义了data存储节点的数据,用struct ListNode*定义了next来存储指向下一节点的指针。
2、主要操作的代码实现
2.1、创建链表
在应用链表时,往往需要先建立一个链表。建立链表的过程实际上就是不断在链表中插入节点的过程。
// 创建新节点
ListNode* createNode(int val)
{
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (!newNode) {
printf("内存分配失败!\n");
exit(1);
}
newNode->data = val;
newNode->next = NULL;
return newNode;
}
有两种常见的插入节点方式:
(1)在链表的头部不断地插入新节点。
(2)在链表的尾部不断地插入新节点。
2.2、插入节点
2.2.1、头部插入
// 头部插入
void insertAtHead(ListNode** hea