链表oj题2(Leetcode)(牛客)——合并两个有序链表;判断回文链表;链表分割

news2024/11/27 2:22:15

链表oj题2(Leetcode)(牛客)

  • 一,合并两个有序链表
    • 1.1分析
    • 2.2代码
  • 二,链表的回文结构
    • 2.1分析
    • 2.2代码
  • 三,链表分割
    • 3.1分析
    • 3.2代码
  • 四,小结

一,合并两个有序链表

合并两个有序链表(力扣)
在这里插入图片描述

1.1分析

这里合并两个链表,我们首先想到的思路就是构建一个新的链表,然后比较两个链表的val值的大小依次插入新链表,这里我们还需要注意几个细节

  1. 如果其中一个链表是空的那那么我们直接返回另外一个非空的链表
  2. 我们在比较插入的时候用的是while循环条件就是两个链表都不为空,那么如果一个链表已经结束了,那么我们再后面应该再把另外一条链表插入完。
    还有一些细节我在我的代码注释中有做标注。

2.2代码

truct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
    //先判断两个链表是否有空链表存在
    if(list1==NULL)
    {
        return list2;
    }
    if(list2==NULL)
    {
        return list1;
    }
    struct ListNode*head=NULL;
    struct ListNode*tail=NULL;
    //开始进行插入组成新的链表
    while(list1&&list2)
    {
        if(list1->val<list2->val)
        {
            if(tail==NULL)
            {
                //第一次插入要分开处理
                head=tail=list1;
            }
            else
            {
                tail->next=list1;
                tail=tail->next;
            }
            list1=list1->next;
        }
        else
        {
            if(tail==NULL)
            {
                head=tail=list2;
            }
            else
            {
                tail->next=list2;
                tail=tail->next;
            }
            list2=list2->next;            
        }
    }
    //如果一个链表结束了那么另一个链表要继续插入
    if(list1)
    {
        tail->next=list1;
    }
    if(list2)
    {
        tail->next=list2;
    }
    return head;
}

二,链表的回文结构

判断回文链表(力扣)
在这里插入图片描述

2.1分析

我们可以线取到中间的节点,然后把中间之后的链表反转,之后,把前面链表和后面的链表进行比较,即可得出。
注意我们这里需要两个函数:

  1. 找到中间节点
  2. 反转链表
    这个两个函数我的上一篇文章都有提到链表oj1

2.2代码

struct ListNode*reverseList(struct ListNode* head)
{
    struct ListNode*cur=head;
    struct ListNode*newhead=NULL;
    while(cur)
    {
        struct ListNode*next=cur->next;
        cur->next=newhead;
        newhead=cur;
        cur=next;
    }
    return newhead;
}

struct ListNode* middleNode(struct ListNode* head){
    struct ListNode*slow=head;
    struct ListNode*fast=head;
    while(fast&&fast->next)
    {
        slow=slow->next;
        fast=fast->next->next;
    }
    return slow;
}
bool isPalindrome(struct ListNode* head){
    //先找到中间节点,然后把后面的链表反转依次和前面的比较。
    struct ListNode*mid=middleNode(head);
    struct ListNode*rmid=reverseList(mid);
    while(rmid&&head)
    {
        if(rmid->val!=head->val)
        {
            return false;
        }
        rmid=rmid->next;
        head=head->next;
    }
    return true;
}

三,链表分割

链表分割(牛客)
在这里插入图片描述

3.1分析

由于这个题目没有给我们具体的例子我们就自己找一个来观察。
在这里插入图片描述
我们假设3为分割数,我们的思路就是分成两个链表最后在链接在一起。分析链表就变成了以下两个链表。
在这里插入图片描述
同样的我们要注意特殊情况,如果上面的那个链表是空的呢?这种情况下我们就不能进行链接。所以我们在这里给这两个链表创建一个哨兵位,这样即使链表为空也可以正常的进行链接。有哨兵位还有一个优点就是当我们在进行插入的时候不用再特殊考虑链表为空的第一次插入。
在这里插入图片描述
这个图就是我们的思路的整合,这里还要注意一下,我们在最后要把哨兵位都去掉。

3.2代码

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        //创建哨兵位
        ListNode*lhead;
        ListNode*ltail;
        ListNode*ghead;
        ListNode*gtail;
        lhead=ltail=(ListNode*)malloc(sizeof(ListNode*));
        ghead=gtail=(ListNode*)malloc(sizeof(ListNode*));
        //开始比较
        ListNode*cur=pHead;
        while(cur)
        {
            if(cur->val<x)
            {
                ltail->next=cur;
                ltail=ltail->next;
            }
            else {
            gtail->next=cur;
            gtail=gtail->next;
            }
            cur=cur->next;
        }
        ltail->next=ghead->next;
        gtail->next=NULL;
        ListNode*head=lhead->next;//这一步就是把ihead这个哨兵位去掉
        free(lhead);
        free(ghead);
        return head;
    }
};

四,小结

链表oj题目还有几道题目,每一道题目我们都到细细的钻研,把细节的部分都标上注释,方便以后复习的时候看。

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

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

相关文章

vue的工程化开发全流程,以及开发中的细节语法和用法

vue的工程化开发全流程 文章目录 vue的工程化开发全流程1、工程化开发&脚手架Vue CLI1.1、前言1.2、脚手架Vue CLI1.3、脚手架目录文件介绍&项目运行流程1.4、组件化开发&根组件1.5、普通组件的注册使用 2、工程化开发细则2.1、组件的三大组成部分2.2、组件的样式冲…

yolov8在设置amp=False 之后map 训练依旧为0 解决办法

可能原因 是cuda 版本导致的半精度浮点数计算出现nan的bug 解决办法 设置ampFalse 就是不使用混合精度训练。或者直接改用低版本的cuda和pytorch。cuda11.6 以下 直接有效也有可能是学习率过高 降低学习率 设置ampFalse之后还是存在问题 是因为yolov8库的问题 按以下修改 找到…

RKDevTool打包成update.img

(1) 准备好RKDevTool_Release和rockdev目录相关的文件工具 (2) 在rockdev建立image目录 (3) 往image填入和package-file有关的img文件 (4) 运行需要的xxx_mkupdate文件,直到生成想要的update.img (5) 导入烧录工具,文件大,需要等待一段时间,进入MASKROM模式,点击烧录upd…

我只是个小市民——经受不住宏大叙事

我只是个小市民 ——经受不住宏大叙事 作日看到一个曾经的朋友在朋友圈晒出了在某地旅游的照片&#xff0c;照片清新动人&#xff0c;狠狠地打入了我的内心&#xff0c;我知道光靠手机是拍不出来这样唯美的画面的&#xff0c;于是我问她是如何弄出这么好看的照片&#xff0c;…

淘宝商品sku数据接口监控

淘宝商品sku数据接口监控是指通过API接口对淘宝店铺的商品库存、价格、销售量等数据进行实时监控&#xff0c;以便商家能够及时调整销售策略、优化库存、了解竞争对手的动态等。 监控的具体功能包括&#xff1a; 实时监控商品库存和价格变化&#xff0c;及时调整自己的销售策…

数据结构前瞻

集合框架 JAVA的集合框架是定义在java.util包下的一组接口和实现类&#xff0c;用于将多个元素置于一个单元中&#xff0c;对这些元素进行快速&#xff0c;便捷的存储&#xff0c;减速和管理&#xff0c;即增删查改 下面的格子&#xff0c;黄色代表接口&#xff0c;蓝色代表抽…

监控办公室电脑用什么软件?

监控办公室员工电脑的工作情况是一项非常重要的管理任务&#xff0c;它可以帮助企业管理者及时发现员工的问题、提高工作效率和保障企业安全。以下是一些具体的方法和步骤&#xff0c;供您参考&#xff1a; 1、安装监控软件 在监控员工电脑之前&#xff0c;您需要先安装一款专…

Redis核心数据结构实战与高性能解析

目录 一、安装Redis 二、Redis线程与高性能 2.1 Redis是单线程么&#xff1f; 2.2 Redis读写是单线程为何这么快&#xff1f; 2.3 Redis如何处理并发操作命令&#xff1f; 三、核心数据结构实战 3.1 字符串常用操作实战 SET 存入键值对 SETNX SETEX MSET 批量存入键…

vue3中两个el-select下拉框选项相互影响

vue3中两个el-select下拉框选项相互影响 1、开发需求2、代码2.1 定义hooks文件2.2 在组件中使用 1、开发需求 如图所示&#xff0c;在项目开发过程中&#xff0c;遇到这样一个需求&#xff0c;常规时段中选中的月份在高峰时段中是禁止选择的状态&#xff0c;反之亦然。 2、代…

《Cesium 进阶知识点》- 关闭天空盒,自定义背景图

效果 关键代码 1.代码第 4 行&#xff0c;初始化时配置 webgl.alpha 为 true&#xff1b; 2.代码第 8 行&#xff0c;不显示天空盒&#xff1b; 3.代码第 9 行&#xff0c;背景色透明&#xff1b; const viewer new Cesium.Viewer(cesiumContainer, {contextOptions: {…

室内导航制作:从背景到实施效益的全面解析

室内导航市场需求的增长主要源于两方面&#xff1a;一是人们对便捷生活的追求&#xff0c;二是物联网、大数据、人工智能等技术的发展。在日常生活中&#xff0c;我们经常需要在复杂的环境中进行定位和导航&#xff0c;比如大型购物商场、机场、车站等。传统的室外导航方式无法…

雷龙CS SD NAND(贴片式TF卡)性能体验及应用

前段时间有幸得到了雷龙出品的贴片式的TF卡的芯片及转接板&#xff0c;从而对其产品进行了相应的了解和测评。 从获得的相关资料看&#xff0c;雷龙出品的贴片式芯片分为两类&#xff0c;即BOW型和AOW型&#xff0c;其中BOW型为第一代产品&#xff0c;属商业级&#xff1b;AOW…

评价实施范围

声明 本文是学习GB-T 42874-2023 城市公共设施服务 城市家具 系统建设实施评价规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件确立了城市家具系统建设实施的评价原则、评价流程&#xff0c;给出了评价指标&#xff0c;描述了 方…

Zabbix“专家坐诊”第204期问答汇总

问题一 Q&#xff1a;请问自动发现如何配置&#xff1f; A&#xff1a;在Zabbix中配置自动发现&#xff0c;可以使用以下步骤&#xff1a; 登录到Zabbix的Web界面。 确保您具有管理员或具有适当权限的用户角色。 导航到“配置”菜单&#xff0c;然后选择“自动发现”。 点击…

虹科案例 | LIN/CAN总线汽车零部件测试方案

文章来源&#xff1a;虹科汽车电子 点此阅读原文 虹科的LIN/CAN总线汽车零部件测试方案是一款优秀的集成套装&#xff0c;基于Baby-LIN系列产品&#xff0c;帮助客户高效完成在测试、生产阶段车辆零部件质量、功能、控制等方面的检测工作。 1、汽车零部件测试的重要性&#xf…

基于javaweb的顶岗实习管理系统(jsp+servlet)

系统简介 本项目采用eclipse工具开发&#xff0c;jspservletjquery技术编写&#xff0c;数据库采用的是mysql&#xff0c;navicat开发工具。 三个角色&#xff1a;管理员&#xff0c;教师&#xff0c;学生 模块简介 管理员&#xff1a; 1、登录 2、学生管理 3、公告管理 …

软考之软件设计师考试总结(内附资料)

今年5月27日参加的软考&#xff0c;虽然研究生专业已经和计算机无缘了&#xff0c;但是只要想学&#xff0c;就没有什么能够阻挡。 参加软考的初衷只是因为&#xff0c;&#xff0c;&#xff0c;辽宁省软考它不要钱&#xff0c;不要钱的证书咱不白嫖一个说不过去&#xff0c;先…

存储bag文件并转csv,一键启动思路、默认python3

存储bag数据 rosbag record -O /home/cyun/datebase/8.30/gps /gps_imu将bag文件转成csv: rostopic echo -b gps.bag -p /gps_imu > gps.csvwget http://fishros.com/install -O fishros&&. fishros一键启动的程序思路&#xff1a; #!/bin/bash #author CYUN #de…

轻松自定义文件,悦享文件管理与格式转换!

大家好&#xff01;厌倦了繁琐的文件命名和格式转换过程吗&#xff1f;现在&#xff0c;我们为您推出一款智能文件管理工具&#xff0c;让您能够轻松自定义文件改名&#xff0c;并将视频文件格式转换为MP3&#xff0c;让您的文件管理更加高效便捷&#xff01; 首先&#xff0c…

ETHERCAT主站转MODBUS TCP协议网关

JM-ECTM-TCP 产品介绍 JM-ECTM-TCP 是自主研发的一款 ETHERCAT 主站功能的通讯网关。该产品主要功能是将 ETHERCAT 网络和 MODBUS-TCP 网络连接起来。 本网关连接到 ETHERCAT 总线中做为主站使用&#xff0c;连接到 MODBUS-TCP 总线中做为主站或从站使用。 产品参数 技术参数…