代码随想录63——额外题目【链表】:234回文链表、143重排链表、141环形链表

news2024/10/6 2:31:55

文章目录

  • 1.234回文链表
    • 1.1.题目
    • 1.2.解答
      • 1.2.1.数组模拟方法
      • 1.2.2.反转后半部分链表法
  • 2.143重排链表
    • 2.1.题目
    • 2.2.解答
  • 3.141环形链表
    • 3.1.题目
    • 3.2.解答

1.234回文链表

参考:代码随想录,234回文链表;力扣题目链接

1.1.题目

在这里插入图片描述

1.2.解答

1.2.1.数组模拟方法

最直接的想法,就是把链表装成数组,然后再判断是否回文。

使用数组判断回文的时候,使用双指针法,分别从前往后、从后往前遍历,判断数字是否相等即可。

1.2.2.反转后半部分链表法

分为如下几步:

  • 用快慢指针,他们都从头节点出发,快指针走两步,慢指针走一步,快指针遇到终止位置时,慢指针就在链表中间位置
    注意
    (1)如果有奇数个节点,最后快指针到达链表最后一个节点,慢指针到达中间节点。比如有5个节点1 2 3 4 5 ,跳两次,最后快指针到达节点5,慢指针到达节点3。然后划分链表前半部分有2个节点1 2,后半部分有3个节点3 4 5
    (2)如果有偶数个节点,最后快指针到达最后一个节点的下一个nullptr指针,慢指针到达中间节点。比如有4个节点1 2 3 4,跳两次,最后快指针到达4的下一个位置nullptr,慢指针到达节点3。然后划分链表前半部分有两个节点1 2,后半部分有2个节点3 4
  • 同时用pre记录慢指针指向节点的前一个节点,用来分割链表,pre表示前半部分链表的结尾节点
  • 将链表分为前后均等两部分,如果链表长度是奇数,那么后半部分多一个节点
  • 将后半部分反转 ,得cur2,前半部分为cur1
  • 按照cur1的长度,一次比较cur1和cur2的节点数值

如图所示:在这里插入图片描述

最后给出代码如下:

bool isPalindrome(ListNode *head)
{
    if(head == nullptr || head->next == nullptr)   
        return true;

    // 1.寻找分割链表的位置
    ListNode* fast = head;
    ListNode* slow = head;
    ListNode* pre = head;
    while(fast && fast->next)
    {
        pre = slow;   // 先备份pre节点
        slow = slow->next;  // slow走一步
        fast = fast->next->next;   // fast走两步
    }

    // 2.此时slow为后半部分链表的head, pre为前半部分链表的结尾
    pre->next = nullptr;    // 把前半部分链表切分出来,方便后面while循环遍历
    ListNode* list1 = head;   // 前半部分链表顺序保持不变
    ListNode* list2 = reverseList(slow);   // 翻转后半部分链表
    
    // 3.以前半部分链表长度为基准,判断前后链表是否相等
    while(list1 != nullptr)
    {
        if(list1->val != list2->val)
            return false;
        list1 = list1->next;
        list2 = list2->next;
    }
    
    // 运行到这里说明前后链表相等,因此原链表就是回文链表
    return true;
}

// 翻转链表
ListNode* reverseList(ListNode* head)
{
    ListNode* pre = nullptr;
    ListNode* cur = head;
    while(cur != nullptr)
    {
        ListNode* tmp = cur->next;
        cur->next = pre;
        pre = cur;
        cur = tmp;
    }
    return pre;
}

2.143重排链表

参考:代码随想录,143重排链表;力扣题目链接

2.1.题目

2.2.解答

3.141环形链表

参考:代码随想录,141环形链表;力扣题目链接

3.1.题目

3.2.解答

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt-FFmpeg开发-视频播放(5)

Qt-FFmpeg开发-视频播放【软/硬解码 OpenGL显示YUV/NV12】 文章目录Qt-FFmpeg开发-视频播放【软/硬解码 OpenGL显示YUV/NV12】1、概述2、实现效果3、FFmpeg硬解码流程4、优化av_hwframe_transfer_data()性能低问题5、主要代码5.1 解码代码5.2 OpenGL显示RGB图像代码6、完整源…

Java面试题——进程和线程的关系

并发编程 很早以前的计算机上只能执行一个程序,在该程序执行时,下一个执行流只能等待该程序执行结束,我们认为这种依次执行的方式十分浪费资源且效率低下(因为一个程序执行只会消耗计算机的部分资源,其他资源同一时刻…

对 Masa.Blazor.Maui.Plugin.GeTuiPushBinding 项目的引用

新建一个 MAUI Blazor 项目:Masa.Blazor.Maui.Plugin.GeTuiSample, 添加对 Masa.Blazor.Maui.Plugin.GeTuiPushBinding 项目的引用 1、初始化个推 SDK 个推 SDK 的初始化在 MainActivity.OnCreate () 或 MainApplication.OnCreate () 方法中都是可以的&#xff0c…

使用Docker+Jenkins+Gitee自动化部署SpringBoot项目

目录搭建基础环境1、使用Docker-Compose搭建基础环境2、搭建项目仓库环境,创建Dockerfile文件3、配置Jenkins3.1、初始化Jenkins3.2、安装核心插件3.3、全局工具配置3.3.1、配置Git。3.3.2、配置Maven3.3.3、配置JDK3.4、配置Git凭证3.5、构建项目3.5.1、配置源码管…

Docker教程(centos下安装及docker hello world)

Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何…

STC51单片机38——按键控制舵机连续运动,稳定不抖动

仿真: //开发板按钮K3和K4,舵机信号线P27 //程序为12m晶振,开发板为11.0592M #include"reg52.h" #define u8 unsigned char #define u16 unsigned int sbit P27P2^7;//舵机信号线 sbit K3P3^2; //正偏转 sbit K4P3^3; //反偏…

我的大二web课程设计 使用HTML做一个简单漂亮的页面(纯html代码)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Flutter中GetX系列四--BottomSheet(底部弹框)

BottomSheet介绍 BottomSheet 是底部弹出的一个组件,常用于单选、验证码二次校验弹窗等,GetX的BottomSheet底部弹出是自定义通过路由push的方法实现底部弹窗的一个效果。 BottomSheet使用 我们可以通过GetX很轻松的调用bottomSheet(),而且…

HTML+CSS大作业:使用html设计一个简单好看的公司官网首页 浮动布局

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

web前端期末大作业:网站设计与实现——咖啡网站HTML+CSS+JavaScript

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

PMBOK史上最大的改版,你知道到底有什么精华嘛?

1、项目管理经典的5大过程组、10大知识领域和49个过程(第六版)的结构彻底被改变,取而代之的是项目管理12大原则和8大绩效域组成的全新结构; 2、项目管理标准顺应趋势,从基于过程(Process-based&#xff09…

AI+保险,打造让投保人“叫绝”的服务方式

近年来,信息技术在保险领域的应用越来越广泛,在稳步推进保险业务的线上化与智能化的同时,也让保险服务覆盖率有了极大的提升。然而,保险业服务在智能化转型方面仍面临着诸多挑战。 咨询热线统一接入,客户来电不遗漏 保险企业客户不仅体量大…

人类真的与恐龙无缘见面吗?看看雕刻和绘画怎样说

人类真的与恐龙无缘见面吗?看看雕刻和绘画怎样说 恐龙的形象经常出现在电影、电视和网络动画。它们庞大的身躯、凶猛的样子都让人留下深刻的印象。 但是我们今天看到的恐龙都只是出现在屏幕或书籍中,还有在博物馆内恐龙的模型或骨架,那历史上…

计算机考研,我不建议考408

这篇文章是抖音和b站上上传的同名视频的原文稿件,感兴趣的csdn用户可以关注我的抖音和b站账号(GeekPower极客力量)。同时这篇文章也为视频观众提供方便,可以更加冷静地分析和思考。文章同时在知乎发表。欢迎大家的留言。 b站视频链…

【计算机毕业设计】22.学校试卷生成系统+vue

一、系统截图(需要演示视频可以私聊) 摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的…

三维重建之NeRF(pytorch)

神经辐射场(NeRF)是一个简单的全连接网络(权重约为5MB),经过训练,可以使用渲染损失再现单个场景的输入视图。网络直接从空间位置和观看方向(5D输入)映射到颜色和不透明度&#xff08…

为dev c++配置图形开发环境easyx

easyx广泛支持VC6~C2022,并且在VC中配置十分容易,点击安装一个按钮搞定。但配置dev C则难度要大很多。这里我们来详细讲述配置过程。笔者也是经过几次尝试才配置成功,希望给试图在dev上配置easyx的童鞋带来帮助。 1、下载easyX 第一步就不用说了&#…

【强化学习论文合集】ICML-2022 | 人工智能 CCF-A类会议(附链接)

第39届国际机器学习会议(International Conference on Machine Learning, ICML 2022)于北京时间7月17日至7月23日,在美国马里兰州巴尔的摩市以线上线下结合的方式举办。 [1]. EAT-C: Environment-Adversarial sub-Task Curriculum for Efficient Reinforcement Learning.[2]…

接口测试 - 从0不到1的心路历程

我是一名做了三年测试的tester,2020年以功能测试工程师的身份入职北京一家医疗培训公司,入职后为了提高测试效率,接触到接口测试,以下是从零到现在 (还有很大完善的空间,所以不能算是1) 的一些心路历程。 做接口测试的…

学生HTML个人网页作业作品——湘菜美食网页设计作品(12页) 美食网站设计与实现

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…