要反转一个双向链表,可以按照以下步骤进行:
-
创建三个指针变量prev、current和next,分别用于指向当前节点的前一个节点、当前节点和下一个节点。
-
初始化prev为NULL,current为链表的头节点。
-
遍历整个链表,每次更新prev、current和next指针的指向,直到current指向最后一个节点。
-
在遍历过程中,将current的next指针指向prev,将prev指针指向current,将next指针指向current的下一个节点。
-
更新prev、current和next指针,继续遍历链表。
-
当current指向最后一个节点时,将链表的头节点指向最后一个节点(即原链表的尾节点),并返回新的头节点。
以下是一个示例代码实现:
#includestruct 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函数来反转链表。