首页主机资讯c语言单链表反转的方法是什么

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

时间2023-12-10 05:54:02发布访客分类主机资讯浏览1002
导读:C语言中单链表的反转可以通过修改指针的指向来实现。具体的方法如下: 定义三个指针:prev、curr和next。初始时,prev指向NULL,curr指向链表的头节点,next指向curr的下一个节点。 遍历链表,直到curr指向N...

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

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

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

  3. 遍历结束后,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,即链表反转成功。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: c语言单链表反转的方法是什么
本文地址: https://pptw.com/jishu/575737.html
win7中stackhash模块故障怎么解决 vb怎么将列表框的内容保存为文本

游客 回复需填写必要信息