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

   2025-02-13 2170
核心提示:C语言中单链表的反转可以通过修改指针的指向来实现。具体的方法如下:定义三个指针:prev、curr和next。初始时,prev指向NULL,c

C语言中单链表的反转可以通过修改指针的指向来实现。具体的方法如下:

定义三个指针:prev、curr和next。初始时,prev指向NULL,curr指向链表的头节点,next指向curr的下一个节点。

遍历链表,直到curr指向NULL为止,循环执行以下操作:a. 将next指向curr的下一个节点,以便保留链表的连接关系。b. 将curr的next指针指向prev,即将curr的指针方向反转。c. 将prev指向curr,以便保留反转后的链表的头节点。d. 将curr指向next,以便继续遍历链表。

遍历结束后,prev指向反转后的链表的头节点,即完成了链表的反转。

以下是一个示例代码:

#include <stdio.h>#include <stdlib.h>struct ListNode {    int val;    struct ListNode *next;};struct ListNode* reverseList(struct ListNode* head) {    struct ListNode *prev = NULL;    struct ListNode *curr = head;        while (curr != NULL) {        struct ListNode *next = curr->next;        curr->next = prev;        prev = curr;        curr = next;    }        return prev;}int main() {    // 创建链表 1->2->3->4->5    struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode));    struct ListNode *node2 = (struct ListNode *)malloc(sizeof(struct ListNode));    struct ListNode *node3 = (struct ListNode *)malloc(sizeof(struct ListNode));    struct ListNode *node4 = (struct ListNode *)malloc(sizeof(struct ListNode));    struct ListNode *node5 = (struct ListNode *)malloc(sizeof(struct ListNode));        head->val = 1;    head->next = node2;        node2->val = 2;    node2->next = node3;        node3->val = 3;    node3->next = node4;        node4->val = 4;    node4->next = node5;        node5->val = 5;    node5->next = NULL;        // 反转链表    struct ListNode *newHead = reverseList(head);        // 遍历打印反转后的链表    struct ListNode *current = newHead;    while (current != NULL) {        printf("%d ", current->val);        current = current->next;    }        return 0;}

运行以上代码,输出结果为:5 4 3 2 1,即链表反转成功。

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