在C语言中,可以使用结构体和指针来实现单链表的反转。

首先,我们需要定义一个结构体来表示链表的节点,其中包含两个成员,一个是存储数据的变量,另一个是指向下一个节点的指针。

typedef struct Node {
    int data;
    struct Node* next;
} Node;

接下来,我们可以编写一个函数来创建链表并返回链表的头节点。

Node* createLinkedList(int* arr, int size) {
    Node* head = NULL;
    Node* tail = NULL;

    for (int i = 0; i < size; i++) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data = arr[i];
        newNode->next = NULL;

        if (head == NULL) {
            head = newNode;
            tail = newNode;
        } else {
            tail->next = newNode;
            tail = newNode;
        }
    }

    return head;
}

然后,我们可以编写一个函数来反转链表。

Node* reverseLinkedList(Node* head) {
    Node* prev = NULL;
    Node* curr = head;

    while (curr != NULL) {
        Node* next = curr->next;
        curr->next = prev;
        prev = curr;
        curr = next;
    }

    return prev;
}

最后,我们可以编写一个函数来打印链表的元素。

void printLinkedList(Node* head) {
    Node* curr = head;

    while (curr != NULL) {
        printf("%d ", curr->data);
        curr = curr->next;
    }

    printf("\n");
}

下面是一个完整的例子:

#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node* next;
} Node;

Node* createLinkedList(int* arr, int size) {
    Node* head = NULL;
    Node* tail = NULL;

    for (int i = 0; i < size; i++) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data = arr[i];
        newNode->next = NULL;

        if (head == NULL) {
            head = newNode;
            tail = newNode;
        } else {
            tail->next = newNode;
            tail = newNode;
        }
    }

    return head;
}

Node* reverseLinkedList(Node* head) {
    Node* prev = NULL;
    Node* curr = head;

    while (curr != NULL) {
        Node* next = curr->next;
        curr->next = prev;
        prev = curr;
        curr = next;
    }

    return prev;
}

void printLinkedList(Node* head) {
    Node* curr = head;

    while (curr != NULL) {
        printf("%d ", curr->data);
        curr = curr->next;
    }

    printf("\n");
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);

    Node* head = createLinkedList(arr, size);
    printf("Original Linked List: ");
    printLinkedList(head);

    Node* newHead = reverseLinkedList(head);
    printf("Reversed Linked List: ");
    printLinkedList(newHead);

    return 0;
}

输出结果为:

Original Linked List: 1 2 3 4 5 
Reversed Linked List: 5 4 3 2 1 

这样就完成了单链表的反转

C语言单链表反转具体是怎么看的

原文地址: http://www.cveoy.top/t/topic/iTwO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录