剑指 Offer 24. 反转链表

这篇具有很好参考价值的文章主要介绍了剑指 Offer 24. 反转链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。
🚁 个人主页:不 良
🔥 系列专栏:🛸剑指 Offer  🛹Linux
📕 学习格言:博观而约取,厚积而薄发
🌹 欢迎进来的小伙伴,如果小伙伴们在学习的过程中,发现有需要纠正的地方,烦请指正,希望能够与诸君一同成长! 🌹


剑指 Offer 24. 反转链表

题目:

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

限制:

0 <= 节点个数 <= 5000

思路一:

双指针法:可以通过改变链表中节点的next指针的指向从而实现链表的反转。

1.设置两个节点prevcurcur表示当前节点,prev表示当前节点的上一个节点,初始状态设置为prev = nullptr; cur = head;再设置一个结点tmp记录cur的下一个结点,即tmp = cur->next

2.改变cur结点next指针的指向,让其指向前一个结点prev,然后再通过prev = cur; cur = tmp; tmp = cur->next 更新cur节点、prev节点和tmp节点;

3.依次向后循环,当cur为空的时候,说明已经遍历完所有的节点,此时prev指向的节点就是反转后链表的头节点,返回的时候返回prev

剑指 Offer 24. 反转链表

代码如下:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* cur = head; 
        ListNode* prev = nullptr;
        while(cur)
        {
            ListNode* tmp = cur->next; //保存cur的下一个结点
            cur->next = prev;
            prev = cur;
            cur = tmp; 
        }
        return prev;
    }
};

时间复杂度:O(N)

空间复杂度:O(1)

思路二:

递归:递归法和双指针法的逻辑相同,也是通过改变指针的指向从而实现反转。

1.递归函数中当cur不为空的时候,先记录下cur节点的下一个节点,再改变cur节点的next指针使其指向prev

2.发生递归,递归参数中的curtmp传到下一层函数后,cur充当prevtmp充当cur

3.当cur为空时递归结束,返回prev结点,此时的prev结点就是反转后的头结点;

双指针法中的循环以及pre = cur; cur = temp;通过递归实现了。

代码如下:

class Solution {
public:
    ListNode* Reverse(ListNode* prev,ListNode* cur)
    {
        if(cur == nullptr)
        {
            //当cur为空的时候,已经遍历完成,此时prev就是反转后链表的头节点 
            return prev;
        }
        ListNode* tmp = cur->next;
        cur->next = prev;//改变cur的next指针指向
        return Reverse(cur,tmp);
    }
    ListNode* reverseList(ListNode* head) {
        return Reverse(nullptr,head);
    }
};

时间复杂度:O(N)

空间复杂度:O(N)文章来源地址https://www.toymoban.com/news/detail-458508.html

到了这里,关于剑指 Offer 24. 反转链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第8天-代码随想录刷题训练-字符串● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 05.替换空格 ● 151.翻转字符串里的单词 ● 剑指Offer58-II.左旋转字符串

    LeetCode链接 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 swap常见的两种交换形式 常见的值交换 通过位运算 LeetCode链接 给定一个

    2024年02月04日
    浏览(42)
  • 【算法第六天7.19】反转字符串,反转字符串||,剑指 Offer 05. 替换空格,反转字符串的单词, 左旋转字符串

    ================================================ 思路 :以中间为分界线,左右两个边界交换字符,依次向里收缩 思路 : 首先:字符串转化为字符数组 char[] res = s.toCharArray(); 最后:将数组再转回字符串 return new String(res); 1、循环以2k为单位, 2、在这个2k长的数组中进行反转,需要有首

    2024年02月16日
    浏览(45)
  • 《剑指offer》——合并两个排序的链表

    本期给大家带来的是  合并两个排序的链表 这道题的讲解!!!  接下来,我们还是先从题干的内容入手,先分析一波题目,在进行画图思考操作。 💨  题目如下: 示例1 输入:{1,3,5},{2,4,6} 返回值:{1,2,3,4,5,6} 示例2 输入:{},{} 返回值:{} 示例3 输入:{-1,2,4},{1,3,4} 返回值:

    2023年04月13日
    浏览(28)
  • 剑指 Offer 06. 从尾到头打印链表

    🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸剑指 Offer   📕 学习格言:博观而约取,厚积而薄发 🌹 欢迎进来的小伙伴,如果小伙伴们在学习的过程中,发现有需要纠正的地方,烦请指正,希望能够与诸君一同

    2024年02月08日
    浏览(30)
  • 剑指 Offer 35. 复杂链表的复制

    请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 示例 1: 输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]] 输出:[[7,null],[13,0],[11,4],[10,2],[1,0]] 示例 2: 输入:head = [[1

    2024年02月15日
    浏览(37)
  • 【剑指offer|图解|链表】删除链表的节点 + 训练计划 V

    🏠 个人主页:@聆风吟的个人主页 🔥系列专栏:本期文章收录在专栏《剑指offer每日一练》中,大家有兴趣可以浏览和关注,后面将会持续更新更多精彩内容! ⏰寄语:少年有梦不应止于心动,更要付诸行动。 🎉欢迎大家关注🔍点赞👍收藏⭐️评论📝 🌈作者留言:文章

    2024年02月08日
    浏览(38)
  • 剑指 offer 链表算法题:链表倒数第k个节点

    题目描述: 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。         例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点

    2024年02月13日
    浏览(27)
  • (链表) 剑指 Offer 25. 合并两个排序的链表 ——【Leetcode每日一题】

    难度:简单 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1-2-4, 1-3-4 输出:1-1-2-3-4-4 限制 : 0 = 链表长度 = 1000 注意:本题与 21. 合并两个有序链表 相同 💡思路: 法一:递归 将该问题可以分解成子链表,只比较当前 l1 链

    2024年02月15日
    浏览(32)
  • 剑指offer--JZ6 从尾到头打印链表

    我写不出来,参考别人的代码后理清思路后再写的C语言版本,代码如下: 最难理解的是创建结果数组那里。我竟然不知道有这种语法。我看了老半天。malloc动态申请的内存可以看作数组使用,而且能使用数组的方式来访问元素。 大致讲解下整体思路: 1.创建一个头结点hea

    2024年02月11日
    浏览(41)
  • 【剑指offer|图解|链表】链表的中间结点 + 链表中倒数第k个结点

    🌈个人主页: 聆风吟 🔥系列专栏: 数据结构、算法模板 🔖少年有梦不应止于心动,更要付诸行动。      💬 hello! 小伙伴们大家好哇,今天作者给大家带来的是链表的相关面试题的讲解,在学习了下文之后,相信大家可以更好的理解链表,并且我们同过本文的练习相

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包