给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。

示例 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(headA == null || headB == null) return null;int x = 0;ListNode newa = headA;ListNode newb = headB;while(headA.next != null || headB.next != null){if(headA.next != null){headA = headA.next;}else{++x;}if(headB.next != null){headB = headB.next;}else{--x;}}if(headA != headB)  return null;while(newa != null && newb != null){if(x > 0){newb = newb.next;x--;}else if(x < 0){newa = newa.next;x++;}else if(x == 0){if(newa == newb){return newa;}newa = newa.next;newb = newb.next;}}return null;}
}

代码是做完了,但是耗时和消耗不是很满意。
看了一下别人的代码才知道有多么简单
代码如下:

class Solution {public:ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode hA = headA; ListNode hB = headB;while(hA != hB) {hA = hA == NULL ? headB : hA.next;hB = hB == NULL ? headA : hB.next;}return hA;}
};

这代码我确实是想不到,虽然呢思路是一致的但是他这更加的简便,在代码量上也更短,确实牛。

面试题 02.07. 链表相交相关推荐

  1. 面试题02.07.链表相交

    面试题02.07链表相交 public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode hea ...

  2. [LeetCode] 面试题 02.07. 链表相交

    LeetCode 面试题 02.07.链表相交 思路 题目的本意其实就是求两个链表相交处结点的指针,并返回该结点指针 步骤: Step1.分别用两个指针curA.curB指向两个链表A.B的头结点 S ...

  3. LeetCode-链表-面试题 02.07. 链表相交

    描述 02.07. 链表相交 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表没有交点,返回 null . 图示两个链表在节点 c1 开始相交 ...

  4. leetcode面试题 02.07. 链表相交

    一:题目 二:思路 1.这道题我们是需要找到一个结点,并且从这个结点往后的结点都相等 2.我们需要将两个链表 右对齐 3.然后将长链表的指针移动到和短链表头结点相同的位置 4.接下来就是比较指针,当一 ...

  5. 力扣(707.面试题02.07)补9.16

    707.设计链表 可以,真的是一个工程类的题目,处处要考虑细节,其实20分钟基本能写好,但是改各种细节又要40分钟,就是各种bug,总共花了一个小时才正确. class MyLinkedList { ...

  6. 面试题 02.05. 链表求和

    面试题 02.05. 链表求和 给定两个用链表表示的整数,每个节点包含一个数位. 这些数位是反向存放的,也就是个位排在链表首部. 编写函数对这两个整数求和,并用链表形式返回结果. 示例: 输入:(7 ...

  7. 代码随想录(day04)-LeetCode:24、19、面试题02.07、142

    代码随想录:dayo4 1. [24]两两交换链表中的节点 虚拟头结点实现 递归实现 2.[19]**删除链表的倒数第N个节点** 双指针算法 3. 面试题[02.07]:链表相交 4.[142]环形 ...

  8. 程序员面试金典 - 面试题 02.05. 链表求和

    1. 题目 给定两个用链表表示的整数,每个节点包含一个数位. 这些数位是反向存放的,也就是个位排在链表首部. 编写函数对这两个整数求和,并用链表形式返回结果. 示例: 输入:(7 -> 1 -& ...

  9. LeetCode Algorithm 面试题 02.06. 回文链表

    面试题 02.06. 回文链表 Ideas 这题当时左神也讲过,用的是快慢指针,不过感觉好麻烦,不如直接遍历链表,把元素值存到数组,然后判断是不是回文数组就OK了. Code C++ class So ...

最新文章

  1. 计算机wrod初级考试题及答案,计算机基础知识+Word基础知识+Excel基础知识试题答案解析.doc...
  2. iPhone开发:类似iChat的聊天泡泡示例
  3. 【清华大学龙明盛副教授】迁移学习理论与算法
  4. linux光驱驱动目录,linux下挂载光驱
  5. 简单的相似图片搜索的原理
  6. 想拿高新就必须知道的知识
  7. 2006年清华大学计算机研究生机试真题
  8. Mybatis日常操作遇到的问题
  9. 随机排列实现 -shuffle算法
  10. Oracle 建立序列以及触发器的建立
  11. 1.08 亿条投注信息遭泄露,Elasticsearch 是祸因?!
  12. yii2 错误处理
  13. 软件著作权算法软件设计说明书_软件著作权说明书模板
  14. 使用计算机软件,计算机使用软件
  15. 费控系统对接用友NC
  16. java毕业设计校园服装租赁系统mybatis+源码+调试部署+系统+数据库+lw
  17. 爱因斯坦:培养独立思考的教育
  18. 拉卡拉支付开启生态化移动支付新趋势
  19. 一文看懂5种ESD防护方法!
  20. DouPHP模块化企业网站管理系统源码 v1.6

热门文章

  1. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(1)- 环境搭建(Python2.7.14 + pySerial3.4 + wxPython4.0.3)...
  2. 802.x 标准介绍
  3. spark-streaming统计各岗位招聘信息行数
  4. bash的特殊符号、变量和运算符
  5. Microsoft SQL Server 图书管理数据库的建立
  6. 怎样学好计算机英语,怎样学好小学英语
  7. 唯品会RPC服务框架与容器化演进--转
  8. 再谈PINGPONG测试
  9. (转载)NB-IoT和eMTC异同
  10. 2021年计算机学硕考研c9,请关注!60所C9、985、211、双一流高校2021年硕士扩招排行榜!...