以下是一個簡單的C語言單鏈表反轉代碼示例:
#include <stdio.h>
#include <stdlib.h>
// 定義鏈表節點結構體
typedef struct Node {
int data;
struct Node* next;
} Node;
// 添加節點到鏈表尾部
void append(Node** head_ref, int new_data) {
// 創建新節點
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = new_data;
new_node->next = NULL;
// 如果鏈表為空,則將新節點設為頭節點
if (*head_ref == NULL) {
*head_ref = new_node;
return;
}
// 找到鏈表的最后一個節點
Node* last_node = *head_ref;
while (last_node->next != NULL) {
last_node = last_node->next;
}
// 將新節點連接到鏈表的最后
last_node->next = new_node;
}
// 反轉鏈表
void reverse(Node** head_ref) {
Node* prev_node = NULL;
Node* current_node = *head_ref;
Node* next_node = NULL;
while (current_node != NULL) {
// 保存下一個節點的指針
next_node = current_node->next;
// 反轉當前節點的指針
current_node->next = prev_node;
// 移動指針
prev_node = current_node;
current_node = next_node;
}
// 將頭節點指向反轉后的鏈表
*head_ref = prev_node;
}
// 打印鏈表
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
// 添加節點到鏈表
append(&head, 1);
append(&head, 2);
append(&head, 3);
append(&head, 4);
// 打印原鏈表
printf("Original list: ");
printList(head);
// 反轉鏈表
reverse(&head);
// 打印反轉后的鏈表
printf("Reversed list: ");
printList(head);
return 0;
}
這段代碼首先定義了一個鏈表節點結構體 Node
,包含一個整型數據和一個指向下一個節點的指針。然后,通過 append
函數將節點添加到鏈表的尾部。接著,通過 reverse
函數將鏈表反轉。最后,通過 printList
函數打印鏈表。在 main
函數中,創建鏈表并進行測試。