legongju.com
我们一直在努力
2025-01-10 16:24 | 星期五

c语言单向链表逆序如何实现

在C语言中,要实现单向链表的逆序,我们需要改变链表中每个节点的next指针,使其指向前一个节点。以下是实现这一功能的步骤:

  1. 初始化三个指针:prev、curr和next。其中,prev用于保存当前节点的前一个节点,初始化为NULL;curr用于遍历链表,初始化为链表的头节点;next用于保存当前节点的下一个节点,初始化为NULL。
  2. 遍历链表,对于每个节点,先保存其下一个节点到next指针,然后将当前节点的next指针指向前一个节点prev。接着,将prev指针移动到curr指针,将curr指针移动到next指针。重复这个过程,直到curr指针变为NULL,即链表遍历完成。
  3. 在遍历过程中,需要注意更新链表的头节点。当curr指针变为NULL时,prev指针指向的是原链表的最后一个节点,即新链表的头节点。因此,需要将链表的头节点更新为prev指针。

以下是具体的C语言代码实现:

#include 
#include 

// 定义链表节点结构体
typedef struct ListNode {
    int val;
    struct ListNode *next;
} ListNode;

// 创建新节点的函数
ListNode* createNode(int val) {
    ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
    newNode->val = val;
    newNode->next = NULL;
    return newNode;
}

// 逆序链表的函数
void reverseList(ListNode** head) {
    ListNode* prev = NULL;
    ListNode* curr = *head;
    ListNode* next = NULL;

    while (curr != NULL) {
        // 保存当前节点的下一个节点
        next = curr->next;
        // 将当前节点的next指针指向前一个节点
        curr->next = prev;
        // 更新prev和curr指针
        prev = curr;
        curr = next;
    }

    // 更新链表的头节点
    *head = prev;
}

// 打印链表的函数
void printList(ListNode* head) {
    ListNode* curr = head;
    while (curr != NULL) {
        printf("%d -> ", curr->val);
        curr = curr->next;
    }
    printf("NULL\n");
}

int main() {
    // 创建链表:1 -> 2 -> 3 -> 4 -> 5 -> NULL
    ListNode* head = createNode(1);
    head->next = createNode(2);
    head->next->next = createNode(3);
    head->next->next->next = createNode(4);
    head->next->next->next->next = createNode(5);

    printf("原链表:\n");
    printList(head);

    // 逆序链表
    reverseList(&head);

    printf("逆序后的链表:\n");
    printList(head);

    return 0;
}

运行上述代码,输出结果为:

原链表:
1 -> 2 -> 3 -> 4 -> 5 -> NULL
逆序后的链表:
5 -> 4 -> 3 -> 2 -> 1 -> NULL

未经允许不得转载 » 本文链接:https://www.legongju.com/article/67894.html

相关推荐

  • 如何正确使用c语言的while循环

    如何正确使用c语言的while循环

    在C语言中,while循环是一种基本的控制结构,用于重复执行一段代码,直到给定条件不再满足
    #include int main() { int counter = 1; // 初始化计数器 // 当...

  • while循环在c语言中的优势是什么

    while循环在c语言中的优势是什么

    在C语言中,while循环具有一定的优势,主要体现在以下几个方面: 简洁性:while循环结构简单,易于理解。它只需要一个条件表达式,当条件为真时,循环体内的代码...

  • c语言中while循环的基本用法

    c语言中while循环的基本用法

    在C语言中,while循环是一种基本的控制结构,用于重复执行一段代码,直到给定的条件不再满足。while循环的基本语法如下:
    while (condition) { // 循环体(...

  • while循环在c语言中的错误处理

    while循环在c语言中的错误处理

    在C语言中,while循环用于重复执行一段代码,直到给定的条件不再满足。然而,如果在编写while循环时出现错误,可能会导致程序陷入无限循环或其他问题。以下是一些...

  • c语言栈的创建方法是什么

    c语言栈的创建方法是什么

    在C语言中,栈(stack)通常是由编译器自动管理的,它用于存储局部变量、函数调用时的参数以及返回地址等。栈的创建和管理是隐式的,程序员无需显式地创建或销毁...

  • c语言如何求三角形面积和周长

    c语言如何求三角形面积和周长

    在C语言中,可以使用以下公式来计算三角形的面积和周长: 周长:三角形的周长是其三条边长之和。如果已知三角形的三条边长a、b和c,则可以通过将它们相加来计算周...

  • c语言如何解二元二次方程

    c语言如何解二元二次方程

    在C语言中,可以使用以下方法来解二元二次方程组: 消元法:通过两个方程相减消去一个未知数,从而将二元二次方程组转化为一元二次方程,然后求解这个一元二次方...

  • c语言如何求等差数列

    c语言如何求等差数列

    在C语言中,求等差数列的和可以通过以下步骤实现: 首先,确定等差数列的首项(a1)、末项(an)以及公差(d)。
    使用公式计算项数(n):n = (an - a1) / ...