c语言双向链表反转的方法是什么

   2025-02-13 3820
核心提示:要实现C语言双向链表的反转,可以采取以下步骤:定义一个指向链表头部的指针和一个指向链表尾部的指针,分别称为head和tail。遍

要实现C语言双向链表的反转,可以采取以下步骤:

定义一个指向链表头部的指针和一个指向链表尾部的指针,分别称为head和tail。遍历链表,将每个节点的prev指针和next指针进行交换。最后,交换head和tail指针。

以下是一个示例代码:

#include <stdio.h>#include <stdlib.h>typedef struct Node {    int data;    struct Node* prev;    struct Node* next;} Node;// 创建链表Node* createLinkedList(int n) {    Node *head, *p, *newNode;    int i, data;        head = (Node*)malloc(sizeof(Node));    head->prev = NULL;    head->next = NULL;        p = head;        for (i = 0; i < n; i++) {        newNode = (Node*)malloc(sizeof(Node));                printf("输入第 %d 个节点的值: ", i+1);        scanf("%d", &data);                newNode->data = data;        newNode->prev = p;        newNode->next = NULL;                p->next = newNode;        p = p->next;    }        return head;}// 反转链表Node* reverseLinkedList(Node* head) {    Node* temp = NULL;    Node* current = head;        // 遍历链表并交换prev和next指针    while (current != NULL) {        temp = current->prev;        current->prev = current->next;        current->next = temp;        current = current->prev;    }        // 更新head指针    if (temp != NULL) {        head = temp->prev;    }        return head;}// 打印链表void printLinkedList(Node* head) {    Node* current = head->next;    while (current != NULL) {        printf("%d ", current->data);        current = current->next;    }    printf("\n");}int main() {    int n;    Node* head;        printf("输入链表长度: ");    scanf("%d", &n);        head = createLinkedList(n);    printf("原始链表: ");    printLinkedList(head);        head = reverseLinkedList(head);    printf("反转后的链表: ");    printLinkedList(head);        return 0;}

注意:在这个示例代码中,我们使用了一个带有头结点的双向链表,头结点的data字段不存储任何数据,只是用来方便操作。

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言