要反轉一個單向鏈表,可以使用三個指針分別指向當前節點、前一個節點和后一個節點。然后,通過修改指針的指向來實現鏈表的反轉。
具體步驟如下:
下面是一個示例代碼實現:
#include<stdio.h>
#include<stdlib.h>
// 定義鏈表節點結構體
struct Node {
int data;
struct Node* next;
};
// 反轉鏈表函數
struct Node* reverseLinkedList(struct Node* head) {
struct Node* cur = head;
struct Node* prev = NULL;
struct Node* next = NULL;
while (cur != NULL) {
next = cur->next; // 暫存當前節點的下一個節點
cur->next = prev; // 將當前節點的下一個節點指向前一個節點,實現翻轉
prev = cur; // 前一個節點指針后移
cur = next; // 當前節點指針后移
}
head = prev; // 將鏈表頭節點指向翻轉后的鏈表的頭節點
return head;
}
// 打印鏈表函數
void printLinkedList(struct Node* head) {
struct Node* cur = head;
while (cur != NULL) {
printf("%d ", cur->data);
cur = cur->next;
}
printf("\n");
}
int main() {
// 創建鏈表
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
struct Node* second = (struct Node*)malloc(sizeof(struct Node));
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;
printf("原始鏈表:");
printLinkedList(head);
// 反轉鏈表
head = reverseLinkedList(head);
printf("反轉后的鏈表:");
printLinkedList(head);
// 釋放內存
free(head);
free(second);
free(third);
return 0;
}
以上代碼創建了一個包含3個節點的鏈表,然后調用reverseLinkedList
函數來反轉鏈表,并使用printLinkedList
函數打印結果。最后釋放動態分配的內存。
輸出結果如下:
原始鏈表:1 2 3
反轉后的鏈表:3 2 1