编写一个程序,找到两个单链表相交的起始节点。

如下面的两个链表:

在节点 c1 开始相交。

示例 1:

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Reference of the node with value = 8
输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。

示例 2:

输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
输出:Reference of the node with value = 2
输入解释:相交节点的值为 2 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。

示例 3:

输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出:null
输入解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
解释:这两个链表不相交,因此返回 null。

注意:

如果两个链表没有交点,返回 null.
在返回结果后,两个链表仍须保持原有的结构。
可假定整个链表结构中没有循环。
程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

思路:相交的链表,一定是同一个尾,所以先遍历两个链表,顺便统计长度。

判断是否相交。

让长的那个先走长出的那部分,然后两边一起往后走,一定会相交。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if(headB==null || headA==null){return null;}ListNode tempA=headA;ListNode tempB=headB;int a=0;int b=0;while(tempA.next!=null){tempA=tempA.next;a++;}while(tempB.next!=null){tempB=tempB.next;b++;}if(tempB!=tempA){return null;}tempA=headA;tempB=headB;if(a>b){for(int i=0;i<a-b;i++){tempA=tempA.next;}}else{for(int i=0;i<b-a;i++){tempB=tempB.next;}}while(tempB!=tempA){tempA=tempA.next;tempB=tempB.next;}return tempA;}
}

leetcode160 相交链表相关推荐

  1. Leetcode160. 相交链表

    Leetcode160. 相交链表 题目: 编写一个程序,找到两个单链表相交的起始节点. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = ...

  2. 47 - 算法 - Leetcode-160 -相交链表

    // 链表对齐 - 160 相交链表class Solution {public:ListNode *getIntersectionNode(ListNode *headA, ListNode *he ...

  3. [Swift]LeetCode160. 相交链表 | Intersection of Two Linked Lists

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. LeetCode160.相交链表

    题目来源:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/description/ 题目描述: 解法一: 先统计两根 ...

  5. 【每日一算法】相交链表

    微信改版,加星标不迷路! 每日一算法 - 相交链表 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, l ...

  6. 《LeetCode力扣练习》第160题 相交链表 Java

    <LeetCode力扣练习>第160题 相交链表 Java 一.资源 题目: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表不存 ...

  7. leetcode 160 简单难度 相交链表

    160. 相交链表 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 输入:intersectVal = 8, listA = [4,1,8,4,5], li ...

  8. 文巾解题 160. 相交链表

    1 题目描述 2 解题思路 2.1 哈希表 遍历listA,把每个节点(以及后继节点)放入一个list中.遍历完A之后遍历B,如果B的某个节点(以及后继节点)在这个list中,那么我们就找到了相交的部 ...

  9. LeetCode-链表-160. 相交链表

    160. 相交链表 思路一:使用set用到了额外的内存,没有达到题目要求 /*** Definition for singly-linked list.* struct ListNode {* int ...

最新文章

  1. 为什么css一开始需要设定margin和padding为 0px?
  2. Hadoop ssh配置设置
  3. TLSNotary中心化预言机(1) TLS1.1协议
  4. FAQ接口自动化_转载参考
  5. python中布尔类型是特殊的_Python中的特殊方法以及应用详解
  6. 网络(6)-TCP/IP对拥塞控制、滑动窗口如何实现可靠性?
  7. tab页签切换----bootstrap
  8. 大数据分析为啥越来越重要
  9. 配置管理工具---SVN
  10. 听说你还不理解JavaScript闭包
  11. C/C++教程 第十七章 —— MFC开发多人聊天室
  12. Dev中ChartControl——属性熟悉与简单应用
  13. Linux档案与目录管理
  14. 学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏)
  15. 计算机在饲养管理方面的应用,高新技术对奶牛业的应用
  16. 期货市场计算机技术指难,期货交易中最重要的是什么?最难的是什么?
  17. Arduino + W5100调试笔记(1)
  18. 酒店无线产品认证靠谱吗
  19. 夏敏捷的24部著作(2019年)
  20. 苹果录屏精灵_iPhone自带投屏与录屏,3分钟教你操作!

热门文章

  1. javapanel根据内部组件_[译]避免在unmounted组件上调用setState
  2. 左右伸缩_冬季装修为啥要留伸缩缝?等到天热地板开裂就晚了!合肥人注意下...
  3. UE4打包后如何调试
  4. 保存hbitmap到文件
  5. 为Cubieboard打造完美Debian系统
  6. Iterator模式
  7. WinCE流设备驱动简介及GPIO驱动的实现
  8. 【转】ABP源码分析三:ABP Module
  9. ASP.NET中共有哪几种类型的控件?其中,HTML控件、HTML服务器控件和WEB服务器控件之间有什么区别
  10. c#进阶(6)—— 网络通信基础知识