LeetCode-1669题:合并两个链表(原创)

【题目描述】

        给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置。下图中蓝色边和节点展示了操作后的结果:

请你返回结果链表的头指针。

【提示】

1)3 <= list1.length <= 104
2)1 <= a <= b < list1.length - 1
3)1 <= list2.length <= 104

【题目链接】. - 力扣(LeetCode)

【解题代码】

package list;import list.base.ListNode;public class MergeInBetween {public static void main(String[] args) {int[] l1 = new int[]{0, 1, 2, 3, 4, 5, 6};int[] l2 = new int[]{1000000, 1000001, 1000002, 1000003, 1000004};ListNode list1 = ListNode.makeList(l1);ListNode list2 = ListNode.makeList(l2);ListNode list3 = new MergeInBetween().mergeInBetween(list1, 2, 5, list2);list3.printList();}private ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {// 先从list1的首节点走a-1步找到节点a前一节点ListNode preANode = followingNode(list1, a - 1);// 再从a节点走b-a+2步找到节点b+1ListNode nextBNode = followingNode(preANode, b - a + 2);// 找到list2的尾节点ListNode tailNode2 = getTailNode(list2);// 将节点a下一节点指向list2首节点preANode.next = list2;// 将list2的尾节点指向节点b下一个节点tailNode2.next = nextBNode;return list1;}private ListNode followingNode(ListNode node, int step) {int i = 0;ListNode node2 = node;while (i < step) {node2 = node2.next;i++;}return node2;}private ListNode getTailNode(ListNode node) {while (node.next != null) {node = node.next;}return node;}
}

【解题思路】

     根据题目描述,可以得出链表操作完之后:

  1. a节点的前一节点指向list2的首节点
  2. list2的尾节点指向b的下一节点 

根据上述思路,很快完成代码编写,并提交LeetCode成功

        

【解题步骤】

  1.  定义一个函数followingNode,从链表某一节点,向后走step步
    private ListNode followingNode(ListNode node, int step) {int i = 0;ListNode node2 = node;while (i < step) {node2 = node2.next;i++;}return node2;
    }
  2. 定义一个函数getTailNode,找到链表尾节点 
    private ListNode getTailNode(ListNode node) {while (node.next != null) {node = node.next;}return node;
    }
  3. 先从list1的首节点走a-1步找到节点a前一节点
     ListNode preANode = followingNode(list1, a - 1);
  4. 再从a节点走b-a+2步找到节点b+1
    ListNode nextBNode = followingNode(preANode, b - a + 2);
  5. 找到list2的尾节点
    ListNode tailNode2 = getTailNode(list2);
  6. 将节点a下一节点指向list2首节点
    preANode.next = list2
  7. 将list2的尾节点指向节点b下一个节点
    tailNode2.next = nextBNode
  8. 最后返回链表list1首节点即可
    return list1;

【思考总结】

  1. 链表操作要注意首节点保存和尾节点的获取与保存
  2. 所有链表操作基本上都是对三个变量的操作:当前节点curNode,上一节点preNode,下一节点nextNode;
  3. 链表遍历时对不停地更新上面三个变量
  4. LeetCode解题之前,一定不要看题解,看了就“破功”了! 

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

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

相关文章

通俗易懂:MySQL中的FOREIGN KEY约束有什么作用?如何创建和删除?

在MySQL数据库中&#xff0c;FOREIGN KEY&#xff08;外键&#xff09;约束是一个重要的概念&#xff0c;它主要用于维护数据库表之间的引用完整性。其主要作用有以下几点&#xff1a; 1. 参照完整性保证 - 外键约束确保了一个表&#xff08;称作“从表”或“子表”&#xff09…

【办公类-21-11】 20240327三级育婴师 多个二级文件夹的docx合并成docx有页码,转PDF

背景展示&#xff1a;有页码的操作题 背景需求&#xff1a; 实操课终于全部结束了&#xff0c;把考试内容&#xff08;docx&#xff09;都写好了 【办公类-21-10】三级育婴师 视频转文字docx&#xff08;等线小五单倍行距&#xff09;&#xff0c;批量改成“宋体小四、1.5倍行…

数据库学习(四)mybatis

Mybatis Mybatis是一个基于数据持久层&#xff08;DAO层&#xff09;的一款框架&#xff0c;他能极大的简化Java中连接数据库&#xff0c;操作数据库也就是jdbc的操作。 在定义mybatis相关接口时&#xff0c;不需要定义实现类&#xff0c;因为在程序启动时&#xff0c;mybati…

docker启动rocketmq简洁教程

docker启动rocketmq 打开云服务器防火墙 配置外网访问创建容器外部存储文件&#xff1a;mkdir -p /root/rocketmq/data/namesrv/logs /root/rocketmq/data/namesrv/store /root/rocketmq/conf /root/rocketmq/data/broker/logs /root/rocketmq/data/broker/store进入到 /root/…

Python环境下一种新的类谱峭度算法的旋转机械故障诊断模型

谱峭度SK的本质是计算每根谱线峭度值的高阶统计量&#xff0c;谱峭度对信号中的瞬态冲击成分十分敏感&#xff0c;能有效的从含有背景噪声信号中识别瞬态冲击及其在频带中的分布。由于谱峭度的复杂性、缺少一个正式的定义和一个容易理解的计算过程使其在很长时间内都未能引入到…

Redis入门到实战-第六弹

Redis实战热身Lists篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的&#xff08;采用BSD许可证&#xff09;&#xff0c;用作数据库、缓存、消息代理和流…

kubectl 启用shell自动补全功能

官网手册参考&#xff1a;https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux/ 系统&#xff1a;centos7 补全脚本依赖于工具 bash-completion&#xff0c; 所以要先安装它&#xff08;可以用命令 type _init_completion 检查 bash-completion 是否已安装&a…

PTA布尔矩阵的奇偶性

一个布尔方阵具有奇偶均势特性&#xff0c;当且仅当每行、每列总和为偶数&#xff0c;即包含偶数个1。如下面这个4*4的矩阵就具有奇偶均势特性&#xff1a; ⎣⎡​1010​0011​1010​0011​⎦⎤​ 编写程序&#xff0c;读入一个n阶方阵并检查它是否具有奇偶均势特性。如果没有…

2024年腾讯云优惠券领取教程及使用攻略分享

随着云计算技术的快速发展&#xff0c;腾讯云作为国内领先的云计算服务提供商&#xff0c;为企业和个人提供了丰富的云产品和服务。为了帮助大家更好地了解和使用腾讯云&#xff0c;本文将为大家详细介绍2024年腾讯云优惠券领取教程及使用攻略。 一、腾讯云优惠券介绍说明 腾讯…

linux性能调优汇总(一)cpu

目录 一、引言 二、CPU ------>2.1、/proc/cpuinfo ------>2.2、cpuid指令 ------>2.3、lscpu ------>2.4、turbostat ------>2.5、rdmsr ------>2.6、perf ------>2.7、top ------>2.8、ps ------>2.9、pidstat 查看每个进程CPU、内存、…

【CSP试题回顾】201812-1-小明上学(优化)

CSP-201812-1-小明上学 解题代码 #include <iostream> using namespace std;int r, y, g, n, k, t, sumTime;int main() {cin >> r >> y >> g >> n;for (size_t i 0; i < n; i){cin >> k >> t;if (k 0)sumTime t;else if(k1…

成都克鲁斯机器人电路板故障维修攻略,快来了解一下!

一、克鲁斯机器人电路板维修步骤 断开电源&#xff1a;在进行电路维修前&#xff0c;务必断开机器人的电源&#xff0c;确保安全。 拆卸电路板&#xff1a;根据电路图或维修手册&#xff0c;小心拆卸故障电路板。注意记录拆卸过程中的细节&#xff0c;以便后续重新安装。 更换损…

基于 VB6的猜拳游戏

基于 VB6的猜拳游戏 1 欢迎页的制作 welcomeFrom 添加一个定时器 代码如下&#xff1a; Private Sub Form_Load()定时器Timer1的时间间隔设置为1000毫秒Timer1.Interval 1000Timer1.Enabled TrueEnd SubPrivate Sub Timer1_Timer()关闭当前窗体Unload MeReadyFrom.Show…

验证码/数组元素的复制.java

1&#xff0c;验证码 题目&#xff1a;定义方法实现随机产生一个5位的验证码&#xff0c;前面四位是大写或小写的英文字母&#xff0c;最后一位是数字 分析&#xff1a;定义一个包含所有大小写字母的数组&#xff0c;然后对数组随机抽取4个索引&#xff0c;将索引对应的字符拼…

内网exp对抗

内网工具对抗 首先&#xff0c;你需要分析&#xff1a; 1、安全工具是否有源代码 2、安全工具源代码逻辑复杂程度 3、当前源代码你是否有能力修改 其次&#xff0c;你需要考虑&#xff1a; 1、无源码或无能力修改 2、各种异常bug打包问题 3、修改打包后效果也不太好 故…

【Linux】详解进程终止进程等待

一、页表&&写时拷贝的进一步理解 页表中不仅仅只有虚拟地址到物理地址的映射&#xff0c;还包括了很多选项&#xff0c;其中就包括了映射条目的权限。当我们进程的代码和数据加载到内存并和进程地址空间建立映射关系时&#xff0c;如果数据的内容不允许被修改&#xff…

PTA------ 敲笨钟

字符串处理问题&#xff01;------->字符串处理相关操做 代码&#xff1a; #include <iostream> #include<algorithm> #include<cmath> #include<cstring> #include<set> #include<stack> #include<queue> #include<map>…

【Java.mysql】——数据删改(DU) 附加数据库约束

目录 &#x1f6a9;更新(Update) &#x1f6a9;删除&#xff08;Delete&#xff09; &#x1f6a9;数据库约束 &#x1f388;约束类型 ✅NULL约束 ✅NNIQUE 唯一约束 ✅DEFAULT&#xff1a;默认值约束 ✅PRIMARY KEY&#xff1a;主键约束 ✅FOREIGN KEY&#xff1a;外键…

什么是字典序?字典序详解

字典序&#xff0c;也称为词典序、字典顺序、字母序或词序&#xff0c;是指在排序时&#xff0c;按照字母顺序或数字顺序等自然顺序进行排序的方法。通常&#xff0c;字典序应用于字符串排序&#xff0c;但也适用于其他类型的数据结构。 对于字符串来说&#xff0c;字典序的排…

探究 Switch Case 和 While 循环:两种强大的控制结构

在计算机编程中&#xff0c;控制结构是指用于控制程序执行流程的特殊语句或语法。这些结构使程序能够根据不同的条件执行不同的操作&#xff0c;从而增强了程序的灵活性和功能性。本文将介绍两种常见的控制结构&#xff1a;Switch Case 和 While 循环&#xff0c;并通过示例代码…