【力扣】LeetCode 206 反转链表

一、题目描述如下:

在这里插入图片描述

二、题目链接:

力扣 209 长度最小的子数组 链接:link

三、解题思路:

  • 思路一:用三个指针直接在当前链表上操作,每次将 n2->next的值改成 n1,不断往后迭代,直到 n2 为空。
    在这里插入图片描述
    代码实现如下:
struct ListNode* reverseList(struct ListNode* head){

    if (head == NULL)
        return NULL;

    // 思路1:用三个指针来改变链表的指向
    struct ListNode* n1 = NULL, *n2 = head, *n3 = head->next;
    
    while (n2 != NULL)
    {
        n2->next = n1;
        n1 = n2;
        n2 = n3;
        if (n3 != NULL)	// 注意判断 n3 为空的情况
            n3 = n3->next;
    }
    return n1;
}
  • 思路二:从原链表中依次取下节点在新链表中进行头插。在这里插入图片描述
    指针移动变化的过程如下:
    在这里插入图片描述
    指针移动变化的过程如下:
    在这里插入图片描述
    代码实现如下:
struct ListNode* reverseList(struct ListNode* head){
    // 思路二: 将每个节点拿下来头插
    struct ListNode* cur = head, * newhead = NULL;

    while (cur != NULL)
    {
        struct ListNode* next = cur->next;  // 记录下一个节点

        // 头插
        cur->next = newhead;
        newhead = cur;
        // 迭代
        cur = next;
    }
    return newhead;
}

四、总结

数据结构的题目,应该多画图去分析,增强自己调试代码的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小Jie努力认真找工作

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值