要實現一個反轉鏈表的操作,可以按照以下步驟進行:
定義一個函數來實現鏈表的反轉操作,函數的輸入參數是鏈表的頭指針,并且函數的返回值也是鏈表的頭指針。
遍歷整個鏈表,將每一個節點的指針方向反轉,即將每個節點的next指針指向其前一個節點。
使用三個指針分別指向當前節點、前一個節點和下一個節點,通過循環不斷更新這三個指針的位置,直到遍歷完整個鏈表。
最后返回反轉后的鏈表的頭指針即可。
下面是一個示例代碼實現:
#include <stdio.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *prev = NULL;
struct ListNode *current = head;
struct ListNode *next = NULL;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
return prev;
}
int main() {
// 構建一個簡單的鏈表 1 -> 2 -> 3 -> 4 -> 5
struct ListNode *node1 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *node2 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *node3 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *node4 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *node5 = (struct ListNode*)malloc(sizeof(struct ListNode));
node1->val = 1;
node1->next = node2;
node2->val = 2;
node2->next = node3;
node3->val = 3;
node3->next = node4;
node4->val = 4;
node4->next = node5;
node5->val = 5;
node5->next = NULL;
// 反轉鏈表
struct ListNode *reversedHead = reverseList(node1);
// 遍歷鏈表輸出反轉后的結果
struct ListNode *current = reversedHead;
while (current != NULL) {
printf("%d ", current->val);
current = current->next;
}
return 0;
}
在這個示例代碼中,我們構建了一個簡單的鏈表1 -> 2 -> 3 -> 4 -> 5,并調用reverseList函數對鏈表進行反轉操作,最后輸出反轉后的結果。