在C語言中,可以通過指針操作來反轉一個鏈表。
首先,需要定義一個結構體表示鏈表的節點,結構體中包含存儲的值(可以是任何類型)和一個指向下一個節點的指針。
struct Node {
int data;
struct Node* next;
};
然后,可以編寫一個函數來反轉鏈表。該函數需要接收鏈表的頭節點作為參數,然后通過指針操作重新排列鏈表節點的順序。
struct Node* reverseList(struct Node* head) {
struct Node* prev = NULL;
struct Node* current = head;
struct Node* next = NULL;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head = prev;
return head;
}
這個函數使用了三個指針:prev
用于保存當前節點的前一個節點,current
用于保存當前節點,next
用于保存當前節點的下一個節點。在循環中,首先將next
指針指向當前節點的下一個節點,然后將當前節點的next
指針指向前一個節點,接著將prev
指針指向當前節點,將current
指針指向next
節點。最后,將頭節點指向反轉后的鏈表的最后一個節點。
以下是一個使用反轉鏈表函數的例子:
int main() {
struct Node* head = NULL;
struct Node* second = NULL;
struct Node* third = NULL;
// 創建鏈表
head = (struct Node*)malloc(sizeof(struct Node));
second = (struct Node*)malloc(sizeof(struct Node));
third = (struct Node*)malloc(sizeof(struct Node));
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = NULL;
// 反轉鏈表
head = reverseList(head);
// 打印反轉后的鏈表
struct Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
return 0;
}
輸出結果為:3 2 1,表示鏈表已成功反轉。