题目描述:

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

注意这里的相交节点表示的是值和物理位置都相同的节点,不仅仅是值相同。

思路分析:

假设链表A和链表B的长度分别为lenA和lenB,这个方法的奇妙之处在于,当pA遍历到末尾时(即pA == nil),它会被重定向到headB继续遍历。类似地,当pB遍历到末尾时,它会被重定向到headA继续遍历。这样,当两个指针相遇时,它们已经同步到相同的起点,并指向第一个公共节点。

如果两个链表存在相同的节点,那么在遍历的时候应该遍历完两个链表的长度,直到两个指针相遇。

点击查看代码
func getIntersectionNode(headA, headB *ListNode) *ListNode {
if headA==nil || headB==nil{
return nil
}
pa,pb := headA,headB
for pa!=pb {
if pa!=nil{
pa = pa.Next
}else {
pa = headB
} if pb!=nil{
pb = pb.Next
}else {
pb = headA
}
}
return pa
}

160. 相交链表 Golang实现的更多相关文章

  1. Java实现 LeetCode 160 相交链表

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

  2. LeetCode 160——相交链表(JAVA)

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

  3. LeetCode 160 相交链表

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

  4. Leetcode题目160.相交链表(简单)

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

  5. LeetCode 160. 相交链表(Intersection of Two Linked Lists)

    题目描述 编写一个程序,找到两个单链表相交的起始节点. 例如,下面的两个链表: A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3 在节点 c1 开始相交. 注意: ...

  6. leetcode 160相交链表

    暴力解法当然可以遍历两个链表,不过time O(mn) space O(1)暂且不说, 方法一:双指针, time O(m+n),space O(1) 可以对比判断环形链表的快慢指针法. 这种方法构思 ...

  7. LeetCode 160. 相交链表 (找出两个链表的公共结点)

    题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/ 编写一个程序,找到两个单链表相交的起始节点. 如下面的两 ...

  8. 【LeetCode】160. 相交链表

    题目 输入两个链表,找出它们的第一个公共节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB ...

  9. [LeetCode题解]160. 相交链表 | 双指针 + 哈希表

    方法一:双指针 解题思路 假设链表存在相交时,headA 的长度为 a + c,headB 的长度为 b + c.如果把 headA 连上 headB,headB 连上 headB 的话,当遍历这两个 ...

  10. Leecode 160.相交链表(Java 哈希表、双指针 两种方法)

    找两个链表第一次指针相同的地方     想法:(本来是没有的,因为没读懂题目描述= =) 1.两个指针,长的先走(长减短相差的长度)这么多的步数,然后就可以开始比较指针,直到指向为空,期间如果指针相同 ...

随机推荐

  1. java多线程之-不可变final

    1.背景 final这个关键字相信大家不陌生吧... 看看下面的案例 2.时间格式化之线程不安全SimpleDateFormat package com.ldp.demo08final; import ...

  2. 使用map方法递归替换组数对象内的某一个值

    const TreeDataSource = (arr) => { // 判断是否是数组 if (!arr || !arr.length > 0) { return } // 将值存入ma ...

  3. 23 暑假友谊赛 No.4(UKIEPC 2017)

    23 暑假友谊赛 No.4(UKIEPC 2017) Problem A Alien Sunset hh,开始一眼差分,但是写寄了qwq,后来换枚举过了(Orz,但是看学长差分是能做的,我就说嘛,差分 ...

  4. Linux/Go环境搭建, HelloWorld运行

    package main import "fmt" func main() { fmt.Printf("Hello,World!!!\n") } 以上是Go语言 ...

  5. JavaScript 的优雅编程技巧:Singleton Pattern

    JavaScript 的优雅编程技巧:Singleton Pattern 定义 单例模式:保证一个类仅有一个实例,并提供一个访问的全局访问点. 特点 仅有一个实例对象 全局都可访问该实例 主动实例化 ...

  6. Sql语句的两表联合查询

    string sql = "select mID,mName,mSex,mAge,(select fzName from TxlFenZu where ID=mFenZu) as mFenZ ...

  7. SLF4J+Logback日志搭建

    一.jar包依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api< ...

  8. javase重开2022年9月21日

    Boolean类型 java中 返回true or false 而在C语言中 返回0表示false 其余皆为true 类型转换 隐式类型转换 隐式类型转换支持字节数小的类型自动转换为字节数大的类型,整 ...

  9. OpenVino快速落地部署教程

    OpenVino快速落地部署教程 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包,主要用于对深度推理做优化.本教程适用于Yolov5-7.0,直接跑Yolov5为6 ...

  10. how to log iptables events

    warning level: iptables -A INPUT -j LOG --log-prefix "BAD_INPUT: " --log-level 4 iptables ...