力扣labuladong一刷day13天双指针8道链表题

力扣labuladong一刷day13天双指针7道链表题

一、21. 合并两个有序链表

题目链接:https://leetcode.cn/problems/merge-two-sorted-lists/
思路:合并只需要新new一个虚拟头结点,然后遍历比较两个链表把较小的那一个顺序接在虚拟头结点后面。遍历停止后把剩余的接上即可。

class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode root = new ListNode();ListNode p1 = list1, p2 = list2, p = root;while (p1 != null && p2 != null) {if (p1.val <= p2.val) {p.next = p1;p1 = p1.next;}else {p.next = p2;p2 = p2.next;}p = p.next;}if (p1 != null) {p.next = p1;}if (p2 != null) {p.next = p2;}return root.next;}
}

二、86. 分隔链表

题目链接:https://leetcode.cn/problems/partition-list/
思路:将比x小的节点都放在x的左边,其他的保持相对位置,那么就相当于把一条链表拆分成两条链表,第一条链表都是比x小的,第二条链表就是大于等于x的,之后再把两条链表拼接在一起即可。

class Solution {public ListNode partition(ListNode head, int x) {ListNode root1 = new ListNode();ListNode root2 = new ListNode();ListNode p1 = root1, p2 = root2, p = head;while (p != null) {if (p.val < x) {p1.next = p;p = p.next;p1 = p1.next;p1.next = null;}else {p2.next = p;p = p.next;p2 = p2.next;p2.next = null;}}if (root1.next == null) return root2.next;p1.next = root2.next;return root1.next;}
}

三、23. 合并 K 个升序链表

题目链接:https://leetcode.cn/problems/merge-k-sorted-lists/
思路:合并k个升序链表,采用优先级队列,将所有链表的头结点入队,然后遍历返回即可,那个节点出队了就把它的next入队即可。

class Solution {
public ListNode mergeKLists(ListNode[] lists) {if (lists.length == 0) return null;ListNode root = new ListNode();ListNode p = root;PriorityQueue<ListNode> queue = new PriorityQueue<>((a, b)-> a.val-b.val);for (ListNode list : lists) {if (list != null) {queue.add(list);}}while (!queue.isEmpty()) {ListNode cur = queue.poll();p.next = cur;p = p.next;if (cur.next != null) {queue.add(cur.next);}}return root.next;}
}

四、19. 删除链表的倒数第 N 个结点

题目链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/
思路:双指针,一快一慢,相隔n即可。

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode root = new ListNode(-1, head);ListNode left = root, right = root;for (int i = 0; i < n; i++) {right = right.next;}while (right.next != null) {left = left.next;right = right.next;}left.next = left.next.next;return root.next;}
}
五、876. 链表的中间结点

题目链接:https://leetcode.cn/problems/middle-of-the-linked-list/
思路:求中间节点想一次遍历即可完成,只需要采用快慢指针,快指针每次比慢指针多走一步,快指针抵达终点时,慢指针即为中点。

class Solution {public ListNode middleNode(ListNode head) {ListNode slow = head, fast = head;while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;}return slow;}
}

六、141. 环形链表

题目链接:https://leetcode.cn/problems/linked-list-cycle/
思路:判断是否成环也是一样的,快慢指针,只要有环快慢指针就会相遇。

public class Solution {public boolean hasCycle(ListNode head) {ListNode slow = head, fast = head;while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;if (slow == fast) return true;}return false;}
}

七、142. 环形链表 II

题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/
思路:取巧一点的方式就是用一个hashset,把遍历过的节点都放进去,只要有重复就有环。

public class Solution {public ListNode detectCycle(ListNode head) {Set<ListNode> set = new HashSet<>();ListNode p = head;while (p != null) {if (set.contains(p)) return p;set.add(p);p = p.next;}return null;}
}

八、160. 相交链表

题目链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/
思路:先算长度,长的先走两步,等到剩余长度都相等再同步往前走

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {int lenA = 0, lenB = 0;ListNode pa = headA, pb = headB;while (pa != null) {lenA++;pa = pa.next;}while (pb != null) {lenB++;pb = pb.next;}pa = headA;pb = headB;if (lenA > lenB) {for (int i = lenB; i < lenA; i++) {pa = pa.next;}}if (lenB > lenA) {for (int i = lenA; i < lenB; i++) {pb = pb.next;}}while (pa != null && pb != null) {if (pa == pb) return pa;pa = pa.next;pb = pb.next;}return null;}
}

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

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

相关文章

使用ChatGPT进行数据分析案例——贷款数据分析

目录 数据数据 每一行是一个记录,代表着一笔贷款,每一列是一个特征,一共1万多条数据,最后一列非常重要save_loans是否成功收回

三层交换机实现不同VLAN间通讯

默认时&#xff0c;同一个VLAN中的主机才能彼此通信&#xff0c;那么交换机上的VLAN用户之间如何通信&#xff1f; 要实现VLAN之间用户的通信&#xff0c;就必须借助路由器或三层交换机来完成。 下面以三层交换机为例子说明&#xff1a; 注意&#xff1a; 1.交换机与三层交换…

“可信区块链运行监测服务平台TBM发展研讨会”将于11月23日在北京召开

为推动区块链治理与创新&#xff0c;积极推进信任科技生态体系建设&#xff0c;中国信息通信研究院、中国移动设计院联合区块链服务网络&#xff08;BSN&#xff09;发展联盟共同发起建立了可信区块链运行监测服务平台&#xff08;TBM&#xff09;。 TBM平台通过对区块链系统的…

个人博客添加访问人数以及访问时间-githubpage

layout: post # 使用的布局&#xff08;不需要改&#xff09; title: 个人博客添加访问人数以及访问时间 # 标题 subtitle: 个人博客优化 #副标题 date: 2023-11-18 # 时间 author: BY ThreeStones1029 # 作者 header-img: img/about_bg.jpg #这篇文章标题背景图片 catalog: tr…

深度学习(小土堆)

self代表当前类的实例&#xff0c;并用于访问实例的属性和方法,主要方便后面访问属性或者方法。 启动事件文件夹 进行上一步需要在pycharm中设置当打开Terminal终端时&#xff0c;自动进入虚拟环境 防止与别人冲突可以修改端口号 将图像的数据类型转为numpy trans…

自用函数(持续更新)

防止win32com结束后有excel进程残留 import win32com.client import win32process,win32api,win32con excel win32com.client.DispatchEx(Excel.Application) def close_excel_by_force(excel): # 关闭进程# Get the windows process idshwnd excel.Hwnd#hwnd win32gui.Fi…

对不听话的孩子怎么办?牢记下面的方法!

对不听话的孩子怎么办?育儿是一项充满挑战的工作&#xff0c;而面对不听话的孩子更是让许多家长头疼的问题。在这篇文章中&#xff0c;我们将分享六个方法&#xff0c;帮助您有效地应对不听话的孩子&#xff0c;建立更加和谐的家庭氛围。 对不听话的孩子怎么办?下面具体来说…

机器学习与图像识别(二)—— OpenCV环境折腾。。

文章目录 进入正题之前版本说明Python环境搭建安装aruco算法 C 环境搭建安装 VSopencv验证 Aruco算法&#xff0c;opencv4.8.0 进入正题之前 OpenCV是一个优秀的开源视觉处理软件框架&#xff0c;也是计算机视觉学习道路上必须掌握的一套工具&#xff0c;奈何其版本兼容性上实…

Kafka、RocketMQ、RabbitMQ的比较总结Kafka、RocketMQ、RabbitMQ的比较总结

【精选】Kafka、RocketMQ、RabbitMQ的比较总结_kafka rabbitmq rocketmq_【江湖】三津的博客-CSDN博客

关于缓存和数据库一致性问题的深入研究

如何保证缓存和数据库一致性&#xff0c;这是一个老生常谈的话题了。 但很多人对这个问题&#xff0c;依旧有很多疑惑&#xff1a; 到底是更新缓存还是删缓存&#xff1f;到底选择先更新数据库&#xff0c;再删除缓存&#xff0c;还是先删除缓存&#xff0c;再更新数据库&…

JAVA必应回答。

怎么知道IO流是否及时关闭&#xff1f; IO流是Java中用于处理输入和输出的一种抽象概念&#xff0c;它可以是文件、网络、内存等不同的数据源或目的地。IO流在使用完毕后&#xff0c;需要及时关闭&#xff0c;以释放系统资源&#xff0c;避免造成内存泄漏或文件占用等问题。12…

mysqlbinlog使用记录

首先要确认mysql启用了binlog功能。一般默认启用。 mysql> select log_bin; ----------- | log_bin | ----------- | 1 | ----------- 然后确认binlog目录 mysql> select log_bin_basename; ---------------------------- | log_bin_basename | -----…

安装Nginx时报:./configure: error: can not define uint32_t

安装版本&#xff1a;v.1.25.3 安装命令&#xff1a; ./configure --prefix/opt/nginx/1.25.3 && make && make install 执行命令后出现异常&#xff0c;如图&#xff1a; 解决方法&#xff1a; yum install -y kernel-headers kernel-devel gcc make

大模型真的会让软件测试人员下岗吗?

在今年3月写过一篇文章&#xff1a;又一次被震惊&#xff1a;从生成和细化需求到应用各种方法设计测试用例 &#xff0c;展示了chatGPT生成测试用例&#xff0c;而且可以用不同的方法生成测试用例&#xff0c;在我们的引导下它还能补充测试用例、完善测试用例。半年之后&#x…

北邮22级信通院数电:Verilog-FPGA(10)第十周实验 实现移位寄存器74LS595

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 二.管脚分配 三.实现过程讲解及效…

关于爬虫中的hook(defineProperty,hook cookies, hook载荷数据,hookXHR)

关于爬虫中的hook&#xff1a; defineProperty var people {age: 19, }; var count20; console.log(people.age) // 参数&#xff1a;对象 属性名字 函数 Object.defineProperty(people, age, {get: function () {console.log(获取值&#xff01;);return count;},// set: …

域名服务器有哪些类型

域名服务器有哪些类型 随着现在网络的不断发展&#xff0c;越来越多的企业开始使用网络建站&#xff0c;以此来进行营销和推广&#xff0c;而网站在建设过程中需要使用域名和空间&#xff0c;那么域名服务器是什么&#xff1f;下面由给大家说一下。 主域名服务器 负责维护一…

SOME/IP 协议介绍(五)指南

指南&#xff08;信息性&#xff09; 选择传输协议 SOME/IP直接支持互联网上使用最广泛的两种传输协议&#xff1a;用户数据报协议&#xff08;UDP&#xff09;和传输控制协议&#xff08;TCP&#xff09;。UDP是一种非常简洁的传输协议&#xff0c;仅支持最重要的功能&#…

单页应用(SPA)和多页应用(MPA)的区别和优缺点?

单页应用&#xff08;Single-Page Application&#xff0c;SPA&#xff09;和多页应用&#xff08;Multi-Page Application&#xff0c;MPA&#xff09;是两种常见的Web应用程序开发模式&#xff0c;它们有一些区别和各自的优缺点。 单页应用&#xff08;SPA&#xff09;&…

在电脑PC端可以分类记笔记的软件选择哪个?

选择用电脑来记录笔记是比较便捷的&#xff0c;电脑屏幕比较大&#xff0c;操作起来比较便捷。但是很多人用电脑来记录笔记&#xff0c;通常会使用电脑上自带的记事本、文档记事工具来整合笔记&#xff0c;打开文档记事本类的软件&#xff0c;密密麻麻的文字呈现出来。 选择用…