要反轉一個雙向鏈表,可以按照以下步驟進行:
創建三個指針變量prev、current和next,分別用于指向當前節點的前一個節點、當前節點和下一個節點。
初始化prev為NULL,current為鏈表的頭節點。
遍歷整個鏈表,每次更新prev、current和next指針的指向,直到current指向最后一個節點。
在遍歷過程中,將current的next指針指向prev,將prev指針指向current,將next指針指向current的下一個節點。
更新prev、current和next指針,繼續遍歷鏈表。
當current指向最后一個節點時,將鏈表的頭節點指向最后一個節點(即原鏈表的尾節點),并返回新的頭節點。
以下是一個示例代碼實現:
#include <stdio.h>
struct Node {
int data;
struct Node* prev;
struct Node* next;
};
struct Node* reverseLinkedList(struct Node* head) {
struct Node* current = head;
struct Node* prev = NULL;
struct Node* next = NULL;
while (current != NULL) {
next = current->next;
current->next = prev;
current->prev = next;
prev = current;
current = next;
}
head = prev;
return head;
}
int main() {
struct Node* head = NULL;
// 初始化雙向鏈表
// ...
head = reverseLinkedList(head);
// 輸出反轉后的鏈表
// ...
return 0;
}
在代碼中,reverseLinkedList函數用于反轉雙向鏈表,并返回反轉后的鏈表頭節點。在main函數中,你可以初始化雙向鏈表并調用reverseLinkedList函數來反轉鏈表。