要反转一个双向链表,可以按照以下步骤进行:
创建三个指针变量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函数来反转链表。