C語言單鏈表刪除指定節點的步驟如下:
具體實現如下:
#include <stdio.h>
#include <stdlib.h>
// 定義鏈表節點結構體
typedef struct Node {
int data; // 數據域
struct Node* next; // 指針域
} Node;
// 刪除指定節點
void deleteNode(Node* head, int value) {
Node* prev = head; // 前一個節點
Node* current = head->next; // 當前節點
// 遍歷鏈表,查找要刪除的節點
while (current != NULL) {
if (current->data == value) {
break;
}
prev = current;
current = current->next;
}
// 當前節點為NULL,表示沒有找到要刪除的節點
if (current == NULL) {
printf("Node with value %d not found.\n", value);
return;
}
// 找到要刪除的節點,刪除
prev->next = current->next;
free(current);
}
// 打印鏈表
void printList(Node* head) {
Node* current = head->next; // 從第一個節點開始打印
// 遍歷鏈表,依次打印節點的數據
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
// 創建鏈表 1->2->3->4->5
Node* head = (Node*)malloc(sizeof(Node)); // 頭節點
Node* node1 = (Node*)malloc(sizeof(Node)); // 第一個節點
Node* node2 = (Node*)malloc(sizeof(Node)); // 第二個節點
Node* node3 = (Node*)malloc(sizeof(Node)); // 第三個節點
Node* node4 = (Node*)malloc(sizeof(Node)); // 第四個節點
head->next = node1;
node1->data = 1;
node1->next = node2;
node2->data = 2;
node2->next = node3;
node3->data = 3;
node3->next = node4;
node4->data = 4;
node4->next = NULL;
printf("Original list: ");
printList(head);
// 刪除節點2
deleteNode(head, 2);
printf("List after deletion: ");
printList(head);
// 釋放內存
free(node4);
free(node3);
free(node2);
free(node1);
free(head);
return 0;
}
以上代碼中,首先創建了一個包含5個節點的鏈表,然后調用deleteNode()
函數刪除了節點2,最后打印鏈表,輸出結果為:
Original list: 1 2 3 4
List after deletion: 1 3 4