最佳答案
引言
鏈表是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言語中帶頭節點單鏈表的操縱。在現實利用中,公道應用這些操縱可能簡化鏈表操縱,進步代碼的可讀性跟可保護性。