问题概述

单链表定义如下:

  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. 【链表】如何判断两个单向链表是否有相交,并找出交点

    判断两个链表是否相交:(假设两个链表都没有环) 1.判断第一个链表的每个节点是否在第二个链表中 2.把第二个链表连接到第一个后面,判断得到的链表是否有环,有环则相交 3.先遍历第一个链表,记住最后一个 ...

  2. PHP 判断链表是否相交

    解题思路: 分三种情况 1.两个链表都是无环链表,则使用指针p1,p2,分别遍历到两个链表尾,如果p1===p2,说明链表相交,否则不相交 2.两个链表有一个有环,另一个无环,那么这种情况链表肯定不相 ...

  3. 如何判断两个单向链表是否有相交,并找出交点

    如果两个单向链表相交,一定是形成Y字形,而不会是X字形.基于这个想法,可以判断两链表是否相交. 代码 NODE* FindNode(NODE* pHead1, NODE* pHead2) {      ...

  4. 如何判断两个链表是否相交并求出相交点

    排除链表存在环的情况 此情况的意思就是普通的单链表是否相交问题. 相交是什么意思?注意不是单纯的节点的数值域相等,相交的意思是两个链表的部门节点的是同一个,就是这些节点为这两个链表共有. 链表的定义参 ...

  5. 《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明

    先看看原题:<编程之美>3.6编程判断两个链表是否相交,原题假设两个链表不带环. 注:位于(*)符号之间的文字出自于:http://blog.csdn.net/v_july_v/artic ...

  6. c语言 判断互质,[经典算法] 找出某数以内与其互质的数

    起因:前几天做了一个这样的题目,感觉自己变成了一个智障,来写写算法: 相关定义: ①质数定义:没有除 '1' 以外的因子的数就是质数.如:1.3.5.7.11等等. ②互质定义:两个数之间除 '1'  ...

  7. MATLAB函数判断绝对素数,自定义函数,找出 以内所有素数(质数)并计算它们的和,matlab...

    C++,VC2008,问题是 编写一个函数,找出3~1000之内,所有的素数.求高手!我在线等 #include#includevoidf(){//筛法charprime[1001];memset(p ...

  8. python编写判断素数的函数并找出前五个摩尼森数_五十八、如何对一个数进行分解质因数...

    「@Author:Runsen」 ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」 ❞ 先问你们一个小学问题:「什么是质因数?小学是对一个数进 ...

  9. 给定两个单链表,编写算法找出两个单链表的公共结点(暴力解题,优化解题)

    算法思想一:暴力解题,设置两个指针p,q,其中q遍历一次单链表,q向后移动一位,直到两个指针指向同一个结点为止. void search(LinkList L, LinkList S){ LNode ...

最新文章

  1. [转] vim的复制粘贴小结
  2. R构建径向核支持向量机分类器实战代码(Radial kernel Support Vector Classifier)
  3. flash流媒体资料
  4. [Vuex系列] - Module的用法(终篇)
  5. UVA - 11181 数学
  6. 在linux文件共享接口,入坑Linux-day13(使用vsftpd服务传输文件、使用Samba或NFS实现文件共享)...
  7. js中实现页面跳转(返回前一页、后一页)
  8. 程序员是如何处理密码的?
  9. Oracle队列锁enq:TS,Temporary Segment (also TableSpace)
  10. greendao的简单使用
  11. 腰围2尺1,2,3,4,5,6,7,8寸各自等于是多少厘米/英寸(对比表)
  12. Linux裸机开发|LCD背光调节实验
  13. 华为设备配置BGP AS号替换
  14. JAVA计算机毕业设计科院垃圾分类系统部署+源码+数据库+系统+lw文档
  15. 基于FPGA的数据采集—信号产生篇
  16. 成为测试/开发程序员,小张:现实就来了个下马威......
  17. 睁开双眼时,便是那张狰狞阴狠的
  18. 分享阿里P8前端架构师技能图谱
  19. 安卓使用无障碍服务监听微信和QQ的收款信息
  20. hadoop+spark+mongodb+mysql+c#

热门文章

  1. 数据有序_详解数据库插入性能优化:合并+事务+有序数据进行INSERT操作
  2. 华为p40论坛_华为高端旗舰继续发力!麒麟990 5G+超感知三摄,256GB降价799元
  3. android 对话框的父view是谁,android – 在对话框中获取相对于其父级的视图位置
  4. Oracle创建视图、通过视图创建表
  5. Git本地缓存问题 修改密码后git无法拉取
  6. 微信开发4——PHP实现PC扫码授权登陆获取用户信息
  7. std::optional
  8. 为什么要使用信道复用技术?常用的信道复用技术有哪些?
  9. webpack入坑指南
  10. kali装电脑_教你Kali Linux怎么安装Nessus软件