判断链表是否相交并找出交点
问题概述
单链表定义如下:
public class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}}
编写程序, 找出两个链表的交点。
如图所示,链表 A
和链表 B
在节点 8
处相交。
算法思路
首先确定一个事情:
如果两个链表有交点, 那么这两个链表的尾节点一定是相等的。
现在不仅需要判断是否有交点, 还需要找出这个节点。继续观察图形, 可以得出,如果两个链表相交,那么较长链表在往后移动 (∣length1−length2∣|length1-length2|∣length1−length2∣)个长度单位后,两个链表往后查找的速度一致,即可以用判断两个节点是否相等的方式来判断交点的位置了。
代码实现:
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA==null||headB==null) {return null;}int l1 = getListNodeLength(headA);int l2 = getListNodeLength(headB);boolean aLargerThanB = l1>l2;//可以知道两个链表的长度int abs = aLargerThanB?(l1-l2):(l2-l1);if (abs!=0) {if (aLargerThanB) {while(abs>0) {headA = headA.next;abs--;}}else{while(abs>0) {headB = headB.next;abs--;}}}while (headA!=null) {if (headA==headB) {return headA;}headA = headA.next;headB = headB.next;}return null;}public int getListNodeLength(ListNode head) {int length = 0;while(head!=null) {length++;head = head.next;}return length;}
判断链表是否相交并找出交点相关推荐
- 【链表】如何判断两个单向链表是否有相交,并找出交点
判断两个链表是否相交:(假设两个链表都没有环) 1.判断第一个链表的每个节点是否在第二个链表中 2.把第二个链表连接到第一个后面,判断得到的链表是否有环,有环则相交 3.先遍历第一个链表,记住最后一个 ...
- PHP 判断链表是否相交
解题思路: 分三种情况 1.两个链表都是无环链表,则使用指针p1,p2,分别遍历到两个链表尾,如果p1===p2,说明链表相交,否则不相交 2.两个链表有一个有环,另一个无环,那么这种情况链表肯定不相 ...
- 如何判断两个单向链表是否有相交,并找出交点
如果两个单向链表相交,一定是形成Y字形,而不会是X字形.基于这个想法,可以判断两链表是否相交. 代码 NODE* FindNode(NODE* pHead1, NODE* pHead2) { ...
- 如何判断两个链表是否相交并求出相交点
排除链表存在环的情况 此情况的意思就是普通的单链表是否相交问题. 相交是什么意思?注意不是单纯的节点的数值域相等,相交的意思是两个链表的部门节点的是同一个,就是这些节点为这两个链表共有. 链表的定义参 ...
- 《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明
先看看原题:<编程之美>3.6编程判断两个链表是否相交,原题假设两个链表不带环. 注:位于(*)符号之间的文字出自于:http://blog.csdn.net/v_july_v/artic ...
- c语言 判断互质,[经典算法] 找出某数以内与其互质的数
起因:前几天做了一个这样的题目,感觉自己变成了一个智障,来写写算法: 相关定义: ①质数定义:没有除 '1' 以外的因子的数就是质数.如:1.3.5.7.11等等. ②互质定义:两个数之间除 '1' ...
- MATLAB函数判断绝对素数,自定义函数,找出 以内所有素数(质数)并计算它们的和,matlab...
C++,VC2008,问题是 编写一个函数,找出3~1000之内,所有的素数.求高手!我在线等 #include#includevoidf(){//筛法charprime[1001];memset(p ...
- python编写判断素数的函数并找出前五个摩尼森数_五十八、如何对一个数进行分解质因数...
「@Author:Runsen」 ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」 ❞ 先问你们一个小学问题:「什么是质因数?小学是对一个数进 ...
- 给定两个单链表,编写算法找出两个单链表的公共结点(暴力解题,优化解题)
算法思想一:暴力解题,设置两个指针p,q,其中q遍历一次单链表,q向后移动一位,直到两个指针指向同一个结点为止. void search(LinkList L, LinkList S){ LNode ...
最新文章
- [转] vim的复制粘贴小结
- R构建径向核支持向量机分类器实战代码(Radial kernel Support Vector Classifier)
- flash流媒体资料
- [Vuex系列] - Module的用法(终篇)
- UVA - 11181 数学
- 在linux文件共享接口,入坑Linux-day13(使用vsftpd服务传输文件、使用Samba或NFS实现文件共享)...
- js中实现页面跳转(返回前一页、后一页)
- 程序员是如何处理密码的?
- Oracle队列锁enq:TS,Temporary Segment (also TableSpace)
- greendao的简单使用
- 腰围2尺1,2,3,4,5,6,7,8寸各自等于是多少厘米/英寸(对比表)
- Linux裸机开发|LCD背光调节实验
- 华为设备配置BGP AS号替换
- JAVA计算机毕业设计科院垃圾分类系统部署+源码+数据库+系统+lw文档
- 基于FPGA的数据采集—信号产生篇
- 成为测试/开发程序员,小张:现实就来了个下马威......
- 睁开双眼时,便是那张狰狞阴狠的
- 分享阿里P8前端架构师技能图谱
- 安卓使用无障碍服务监听微信和QQ的收款信息
- hadoop+spark+mongodb+mysql+c#
热门文章
- 数据有序_详解数据库插入性能优化:合并+事务+有序数据进行INSERT操作
- 华为p40论坛_华为高端旗舰继续发力!麒麟990 5G+超感知三摄,256GB降价799元
- android 对话框的父view是谁,android – 在对话框中获取相对于其父级的视图位置
- Oracle创建视图、通过视图创建表
- Git本地缓存问题 修改密码后git无法拉取
- 微信开发4——PHP实现PC扫码授权登陆获取用户信息
- std::optional
- 为什么要使用信道复用技术?常用的信道复用技术有哪些?
- webpack入坑指南
- kali装电脑_教你Kali Linux怎么安装Nessus软件