引言
链表是C语言中一种常用的数据结构,它通过节点之间的指针连接形成线性序列。在链表操作中,带头节点的设计能够简化许多操作,使得代码更加清晰和易于维护。本文将详细介绍C语言中带头节点单链表的操作,帮助读者轻松应对复杂链表操作。
带头节点单链表的定义
首先,我们需要定义链表的节点结构。带头节点的链表在链表的开始处有一个额外的节点,它的数据部分通常不存储实际元素,而是用于方便操作。
typedef struct Node {
int data; // 数据域
struct Node* next; // 指针域,指向下一个节点
} Node;
接下来,定义链表结构体,包含一个指向头节点的指针。
typedef struct LinkedList {
Node* head; // 头结点
} LinkedList;
创建链表
创建一个空链表就是初始化一个头结点,其next
指针为NULL
。
LinkedList* createLinkedList() {
LinkedList* list = (LinkedList*)malloc(sizeof(LinkedList));
list->head = NULL;
return list;
}
插入节点
插入节点分为在链表头部插入和在特定位置插入。
在头部插入节点
void insertAtStart(LinkedList* list, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = list->head;
list->head = newNode;
}
在特定位置插入节点
void insertAfter(Node prevNode, int value) {
if (prevNode == NULL) return;
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = prevNode->next;
prevNode->next = newNode;
}
删除节点
删除节点分为删除指定节点、删除指定值的节点和按序删除第i
个节点。
删除指定节点
void deleteNode(Node* node) {
if (node == NULL) return;
Node* temp = node->next;
free(node);
node = temp;
}
删除指定值的节点
void deleteValue(LinkedList* list, int value) {
Node* current = list->head;
Node* prev = NULL;
while (current != NULL && current->data != value) {
prev = current;
current = current->next;
}
if (current == NULL) return;
if (prev == NULL) {
list->head = current->next;
} else {
prev->next = current->next;
}
free(current);
}
按序删除第i
个节点
void deleteAt(LinkedList* list, int i) {
if (i <= 0 || list->head == NULL) return;
Node* current = list->head;
Node* prev = NULL;
int count = 1;
while (current != NULL && count != i) {
prev = current;
current = current->next;
count++;
}
if (current == NULL) return;
if (prev == NULL) {
list->head = current->next;
} else {
prev->next = current->next;
}
free(current);
}
打印链表
void printList(LinkedList* list) {
Node* current = list->head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
总结
通过以上介绍,相信读者已经掌握了C语言中带头节点单链表的操作。在实际应用中,合理运用这些操作可以简化链表操作,提高代码的可读性和可维护性。