Solution 7: 判断两链表是否相交

问题描述

RT.

 

解决思路

(1) 两链表都是单向链表:判断两链表的末尾节点是否相同;

(2) 两链表中一个有环,一个没环:不可能相交;

(3) 两链表都有环:slow-fast双指针方法。

 

程序

 

public class ListIntersection {// two single listpublic boolean isIntersectionOfTwoSingleList(ListNode l1, ListNode l2) {if (l1 == null || l2 == null) {return false;}// whether the end of two list is sameListNode endOfList1 = getEndOfList(l1);ListNode endOfList2 = getEndOfList(l2);return endOfList1 == endOfList2;}private ListNode getEndOfList(ListNode head) {if (head == null) {return null;}ListNode node = head;while (node.next != null) {node = node.next;}return node;}// two list with cyclepublic boolean isIntersectionOfTwoListWithCycle(ListNode l1, ListNode l2) {if (l1 == null || l2 == null) {return false;}ListNode slow = l1, fast = l2;while (fast.next != null || fast != null || slow != null) {slow = slow.next;fast = fast.next.next;if (slow == fast) {return true;}}return false;}
}

 

Follow up

求出两个链表相交的第一个节点(如果存在的话)。

 

(1) 两条单链表

a. 求出两条链表的长度及长度之差diff,然后设立两个指针指向两链表的头结点,其中指向长链表头结点的指针向前移动diff步;

b. 然后同时移动两指针,直到所指节点相同(地址相同)为止,否则返回null。

 

(2) 两条链表有环

首先slow-fast,直到相遇为止,其中任意一个指针指回其头结点,然后slow和fast指针同时移动,直到相遇,相遇的节点为第一个相交的节点。

(注意:可能有两个相交的节点)

 

程序

public class ListIntersection2 {// two single listpublic ListNode getFirstIntersectionNodeOfSingleList(ListNode l1,ListNode l2) {ListNode longNode = l1, shortNode = l2;int len1 = getLenOfList(l1);int len2 = getLenOfList(l2);if (len1 < len2) {longNode = l2;shortNode = l1;}int diff = Math.abs(len1 - len2);// long move diff stepswhile (diff > 0) {longNode = longNode.next;--diff;}while (longNode != null && shortNode != null) {if (longNode == shortNode) {return longNode;}longNode = longNode.next;shortNode = shortNode.next;}return null;}private int getLenOfList(ListNode head) {ListNode node = head;int len = 0;while (node != null) {++len;node = node.next;}return len;}// two list with cyclepublic ListNode getFirstIntersectionNodeOfCycleList(ListNode l1, ListNode l2) {if (l1 == null || l2 == null) {return null;}ListNode slow = l1, fast = l2;while (fast.next != null || fast != null || slow != null) {if (fast == slow) {break;}slow = slow.next;fast = fast.next.next;}if (fast == null || slow == null) {return null;}slow = l1;while (slow != fast) {slow = slow.next;fast = fast.next;}return slow;}
}

 

转载于:https://www.cnblogs.com/harrygogo/p/4614277.html

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

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

相关文章

Qt程序窗口关闭不退出而最小化到托盘的方法

一、描述 为避免错点关闭按钮&#xff0c;使得软件关闭退出。需要开发一种类似于QQ桌面之类的功能&#xff0c;点击关闭按钮并不退出&#xff0c;开发的应用程序在用户鼠标点击右上角的关闭按钮时&#xff0c;程序不退出&#xff0c;缩小到右下角&#xff0c;进入托盘。例如wi…

UltraEdit如何自动换行

UltraEdit是一款功能强大的文本工具&#xff0c;可以用于编程。安装UltraEdit之后&#xff0c;默认的设置没有自动换行。设置的方法是&#xff0c;点击菜单栏的“高级→配置”&#xff0c;找到“编辑器→自动换行/制表符设置”&#xff0c;如下图的左边。然后&#xff0c;把“默…

老华为可以升级鸿蒙,真良心!五年前老机型都能升级华为鸿蒙

真良心&#xff01;五年前老机型都能升级华为鸿蒙来源&#xff1a;搜狐网作者&#xff1a;小码说娱乐时间&#xff1a;2021-06-03 12:01:21经过多年的摔打&#xff0c;鸿蒙终于迎来了新生。而在6月2日(今天)晚上的发布会上&#xff0c;令我们感到震惊的不仅仅是华为的新品&…

XSS代码注入框架

首先需要了解一下几点&#xff1a; 1.浏览器中Javascript变量的生命周期 Javascript变量的生命周期并不是你声明这个变量个窗口闭就被回收&#xff0c;只要有引用就会一直持续到浏览器关闭。 2.window对象下方法会在在窗口被关闭时清掉&#xff0c;比如&#xff1a; window.set…

html转换vmax,CSS里px、em、rem、%、vw、vh、vmin、vmax这些单位的区别

不要删除CSS中常见的单位px&#xff1a;最常见的&#xff0c;页面按照精准样式展示&#xff0c;属于绝对单位em&#xff1a;基准点为父节点字体的大小&#xff0c;如果自身定义了font-size按自身来计算&#xff1b;也就是说这个em不是一个固定值&#xff0c;属于相对单位rem&am…

Qt中使用QFile对文本文件的读写

一、思路 1、Qt打开关闭文件用到QFile,包含头文件#include <QFile> 2、文件的读写用标准QTextStream&#xff0c;包含头文件#include <QTextStream> 二、具体实现 //打开fileQFile file(ui->lineEdit_filepath->text());if(!file.open(QIODevice::ReadWri…

Linux下定时器使用

From: http://blog.csdn.net/gudulyn/article/details/885334 Linux下的定时器有两种&#xff0c;以下分别介绍&#xff1a; 1、alarm 如果不要求很精确的话&#xff0c;用 alarm() 和 signal() 就够了 unsigned int alarm(unsigned int seconds)…

T-SQL SUM Functions

SQL Server SUM()函数&#xff0c;计算字段值和&#xff0c;不包括NULL值。 下面例子中&#xff0c;计算所有职员薪金总值&#xff1a; 数据源&#xff1a; SQL语句&#xff1a; SELECTSUM([Salary]) AS[Totals]FROM[dbo].[Member]执行结果&#xff1a;

React开发(235):document.body.clientHeight

document.body.clientHeight获取可视化高度

Qt模态界面设置setWindowModality禁止其他界面响应

一、模态与非模态 模态&#xff1a;启动模态界面时&#xff0c;例如弹出对话框强制用户从其他正在进行的业务中聚焦到当前对话框&#xff0c;除了该对话框整个应用程序窗口都无法接受用户响应&#xff0c;无法切换界面&#xff0c;无法切换当前Qt应用。这可以保证用户按照自己…

html定位fix,html 定位fixed

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家&#xff0c;也给大家做个参考。123#sub1{width:50px;height:80px;border:1px solid #dcdcdc;}#sub2{position:fixed;top:250px;right:20px;width:50px;height:80px;border:1px solid #dcdcdc;m…

OpenCV-CL: OpenCL加速计算机视觉技术

大家好&#xff01;我借这篇文章&#xff0c;分享给大家今年计算机视觉领域里的一些令人兴奋不已的最新进展。特别是最新OpenCV&#xff08;当前最流行的计算机视觉库&#xff09;的发布&#xff0c;您的计算机视觉应用程序可以在现代异构计算平台上充分利用CPU和GPU的全部计算…

如何在Microwindows中显示图片和安装字体

From: http://bbs.chinaunix.net/thread-1987116-1-1.html 一、前言Microwindows可以运行在 支持Framebuffer的 32位的 Linux系统上&#xff0c;或者也可以使用著名的 SVGALib[45] 库来进行图形显示。此外&#xff0c;它还被移植到16位的EL KS 和实模式的MSDOS上。Microwindows…

VS2008创建dll,并使用dll

原来一直使用vc6.0做开发&#xff0c;但是公司主要使用vs2008工具&#xff0c;刚开始使用的时候感觉非常不好用&#xff0c;但是一周下来&#xff0c;不禁感叹&#xff0c;还是新的好啊&#xff0c;嘿嘿&#xff01; 这里总结一下vs2008下创建dll并使用dll导出函数的方法&#…

MySQL常用语法记录

0、说明 记录MySQL使用到的常用语法。 1、MySQLDISTINCT唯一 2、MySQLLIMIT限制 3、MySQL ORDER排序升序 4、MySQL DESC降序 5、MySQL WHERE 过滤 6、MySQL 操作符 AND OR ,AND优先级高于OR 7、MySQL IN 8、MySQL NOT 否定之后跟的任何条件 9、MySQL LIKE通配符 可在任意位置…

React开发(245):ant design form自定义验证

<Form.Item label"联系人手机号&#xff1a;">{getFieldDecorator(contactMobile, {initialValue: type update ? activeUpdateData.contactMobile : ,rules: [{ required: true, message: 请输入联系人手机号 },{ pattern: isPhone, message: 手机号格式不…

武汉科技大学计算机转专业吗,武汉科技大学普通本科生专业选择与转专业管理办法...

武科大教〔2018〕28号第一条为了进一步深化教育教学改革&#xff0c;稳步推进学分制和大类培养&#xff0c;为学生提供灵活多样的学习方式&#xff0c;充分调动学生学习的积极性和主动性&#xff0c;促进学生个性化发展&#xff0c;根据《普通高等学校学生管理规定》(教育部令第…

js DOM——JS学习笔记2015-7-2(第73天)

这个是w3cschool上面的简易版教程&#xff0c;虽然简易&#xff0c;但是对整个JS DOM&#xff0c;有个大致的概念&#xff0c;同时引入思维导图这种图表法学习方式&#xff0c;期待更加便于记忆和管理 转载于:https://www.cnblogs.com/zhangxg/p/4615453.html