LeetCode LCR024.反转链表 经典题目 C写法

LeetCode LCR024.反转链表 经典题目C写法

第一种思路🧐:

​ 使用三个指针,n1,n2,n3,n1为空,n2为头结点,n3为头结点的next。开始反转后,n1赋值给n2的next,n2赋值给n1,n3赋值给n2找到下一个反转的结点,n3找它的next遍历。如此迭代就完成了反转

代码🔎:

c 复制代码
struct ListNode* reverseList(struct ListNode* head){
    if(head == NULL) //链表为空直接返回
        return head;
    struct ListNode* n1 = NULL;
    struct ListNode* n2 = head;
    struct ListNode* n3 = n2->next;
    while(n2)
    {
        n2->next = n1; //反转该结点的指向
        n1 = n2; //变成下一个结点,方便n2反转
        n2 = n3; //n2找到下一个要反转的结点
        if(n3) //当n3已经为空时就停止,不然就访问到野指针了
            n3 = n3->next; //n3找到后一个结点
    }
    return n1;
}

第二种思路🧐:

​ 创建两个指针rhead和cur,rhead作为新的头,cur进行链表遍历,将每个结点头插在rhead上

代码🔎:

c 复制代码
struct ListNode* rhead = NULL;
    struct ListNode* cur = head;
    while(cur)
    {
        struct ListNode* tail = cur->next; //定义在里面则能防止访问到野指针
        cur->next = rhead; //头插
        rhead = cur; //更新头结点
        cur = tail; //回到原链表
    }
    return rhead;
相关推荐
天空'之城2 小时前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
玖玥拾10 小时前
LeetCode 88 合并两个有序数组
算法·leetcode
stevenseahang10 小时前
C语言标准演化史:从K&R到GNU,谁才是正统?
c语言·gnu·可移植性·标准演化·ansic
别动我齐刘海11 小时前
Day6 unitree_G1人形机器人GMR—— MotionInput
c语言·c++·人工智能·学习·机器学习·机器人·github
Hi李耶11 小时前
【LeetCode】541.反转字符串 II
算法·leetcode·职场和发展
AI科技星12 小时前
曲率‑挠率与 $\boldsymbol{\omega/c}$ 的关系、精算验证及其物理意义
c语言·开发语言·线性代数·算法·决策树·机器学习·ai科技星
坏柠15 小时前
C语言进阶:从零实现一个可靠的环形缓冲区,吃透回绕、边界与并发
java·c语言·算法
choumin15 小时前
C程序能调用extern “C“声明的带默认参数的C++函数吗?
c语言·c++·extern c·默认参数
LONGZETECH16 小时前
传统实训 vs 仿真实训:从技术架构拆解新能源汽车教学的范式之变
c语言·3d·unity·架构·汽车
白白白小纯16 小时前
每日算法day3—回文链表,链表分割
c语言·数据结构·算法·leetcode