问题描述

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

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

  1. python判断两线段是否相交_c语言 判断两直线段是否相交

    转了多人的放到一起比较!! //功能:求点在有向直线左边还是右边 //返回:0共线.1左边.-1右边 intleft_right(pointa,pointb,doublex,doubley) { do ...

  2. 用matlab判断两个球是否相交,判断两个矩阵相交

    判断两个矩阵相交 最近在回顾hihocoder上自己做过的题,看到清理海报这道题目,http://hihocoder.com/problemset/problem/1273?sid=707390当初比 ...

  3. 快速排斥实验amp;跨立实验 判断两直线是否相交

    两条线段有且仅有一个公共点,且这个点不是任何一条线段的端点时,称这两条线段是严格相交的. 也就是说线段不严格相交时可以将端点作为交点,但本文不讨论不严格相交,只讨论严格相交的情况(即使它们在算法实现上 ...

  4. 判断单链表是否有环 两链表是否相交

    1.如何判断一个链表是不是这类链表?  2.如果链表为存在环,如果找到环的入口点? 解答: 一.判断链表是否存在环,办法为: 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步 ...

  5. 如何判断两个平面相交_初一数学下册预习第五章 相交线与平行线上

    初一数学下册预习第五章    相交线与平行线上 平面内,点与直线之间的位置关系分为两种:① 点在线上    ② 点在线外同一平面内,两条或多条不重合的直线之间的位置关系只有两种:① 相交    ② 平 ...

  6. hdu 1086(判断两线段是否相交)

    题意:给出一些线段,问有多少个交点. 解题思路:这里实际就是一个线段相交的模型,下面这个图给出了思路. 如果两线段相交,则两线段必然相互跨立对方.若P1P2跨立Q1Q2 ,则矢量 ( P1 - Q1 ...

  7. 判断两线段是否相交——快速排斥与跨立实验

    如何判断两条线段是否相交呢?如果是我们去解决这个问题,用眼睛很容易就看出来了,但是如果用计算机来解决这个问题,该怎么办呢?下面介绍两个方法,这两个方法结合起来就能完美解决这个问题了. 一.快速排斥 对 ...

  8. 如何判断两个平面相交_七年级下册相交线与平行线全章节复习

    5.1 相交线 (一)相交线 两条直线相交,形成4个角. 1.两条直线相交所成的四个角中,相邻的两个角叫做邻补角,特点是两个角共用一条边,另一条边互为反向延长线,性质是邻补角互补:相对的两个角叫做对顶 ...

  9. 判断两个矩形相交以及求出相交的区域

    问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,Ya1),右下角坐标为(Xa2,Ya2),矩形B的左上角坐标为(Xb1,Yb1),右下角 坐标为(Xb2,Yb2). (1)设计一个算法,确定两 ...

最新文章

  1. matlab dir datenum,matlab中的datenum
  2. hive 插入数据映射到hbase_大数据基础知识:Hadoop分布式系统介绍
  3. #10003. 「一本通 1.1 例 4」加工生产调度(贪心)
  4. P7295-[USACO21JAN]Paint by Letters P【平面图欧拉公式】
  5. HTML 表单 存为EXCEL文件时 中文显示乱码
  6. Spring Boot学习总结(25)——Spring Boot 资源初始化加载总结
  7. 14. Thinking carefullly about copying behavior in resource-managing classes
  8. 计算机odbc数据源管理位置,使用 ODBC 数据源管理器
  9. Yandex插件使用说明——Slager_Z
  10. C语言求阶乘尾数零的个数
  11. 计算机网络-什么是网络协议?
  12. 崔云php_佘家村里的“茉莉香”
  13. java使字符串转二维码
  14. Windows锁屏图片文件存放位置
  15. 575. 分糖果【我亦无他唯手熟尔】
  16. 阿里面试官鬼得很,问我为什么他们阿里要禁用Executors创建线程池?
  17. HEVC解码器HM源码阅读(四)解析参数集
  18. PTW International宣布运营电竞战队“Orange Rock Esports”
  19. tar -d 选项 比较归档文件与文件系统中的内容
  20. 基于SIMD的算法加速技术简介

热门文章

  1. CSS+HTML+JQuery简单菜单
  2. C#中字符串保留双引号
  3. 本人服务器遭受黑客长期攻击,特把这几天做的一些有用的安全方面总结出来,以方便以后查阅
  4. MySQL基础部分总结
  5. SDUT-2121_数据结构实验之链表六:有序链表的建立
  6. SPI和RAM IP核
  7. curl的安装与简单使用
  8. elasticsearch,elasticsearch-service安装
  9. Python自动化运维:Django之View视图和Template
  10. 轻松获取LAMP环境的配置参数