news 2026/5/8 16:53:29

022相交链表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
022相交链表

相交链表

题目链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/?envType=study-plan-v2&envId=top-100-liked

我的解答:

public ListNode getIntersectionNode(ListNode headA, ListNode headB) { Set<ListNode> set = new HashSet<>(); ListNode cur = headA; while(cur!=null){ set.add(cur); cur = cur.next; } cur = headB; while(cur!=null){ if(set.contains(cur)){ return cur; } cur = cur.next; } return null; }

分析:代码的时间复杂度为O(m+n),空间复杂度为O(m),m为链表A的长度。自己未能想出时间复杂度为O(m+n)且空间复杂度为O(1)的解法。采用哈希集合解题,先将链表A的所有节点存入set集合中,然后遍历链表B判断每个节点是否已经存在于集合中,若存在,则此节点为相交的起始节点。

看了官方题解后的解答:

//方法一:哈希集合(解题思路与我的解答一致) //时间复杂度:O(m+n) //空间复杂度:O(m),m为链表A的长度 //方法二:双指针 //时间复杂度:O(m+n) //空间复杂度:O(1) //只看思路编写的代码: public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode pA = headA, pB = headB; while(pA!=null && pB!=null){ if(pA==pB){ return pA; } pA = pA.next; pB = pB.next; } if(pA!=null){ pB = headA; while(pA!=null){ pA = pA.next; pB = pB.next; } pA = headB; } else if(pB!=null){ pA = headB; while(pB!=null){ pA = pA.next; pB = pB.next; } pB = headA; } while(pA!=null && pB!=null){ if(pA==pB){ return pA; } pA = pA.next; pB = pB.next; } return null; } //看了思路和代码后编写的代码: public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode pA = headA, pB = headB; while(pA!=pB){ pA = pA==null ? headB : pA.next; pB = pB==null ? headA : pB.next; } return pA; }

分析:

​ 方法二的解题思路:起始两个指针分别指向两个链表的头节点,然后同时向后移动,若两个链表的长度相等,那么两个指针会同时指向相交节点或null;若两个链表长度不相等,假设此时指向较短链表的指针为pA,指向较长链表的指针为pB,那么当pA移动到null时,pB剩余的步数就是两个链表的长度之差,这时我们将pA指向较长链表的头节点,然后继续同时移动两个指针,当pB指向null时,pA指针恰好走过了较长链表多出的那部分,此时我们让pB指向较短链表的头节点,再让pA和pB同时移动,移动到相同节点或null时返回其中一个指针就是答案。

总结

  • 本题可采用双指针解法来降低空间复杂度,双指针解法的关键在于当两个链表长度不相等时,如何同步两个指针的移动,关键思路就是让两个指针同时移动,当其中一个指针指向null时,另一个指针剩余的步数就是两个链表的长度之差,根据这点就可以轻松地实现两个两个指针的同步。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 16:53:20

LRCGET:一站式离线音乐歌词批量同步解决方案

LRCGET&#xff1a;一站式离线音乐歌词批量同步解决方案 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否曾为海量离线音乐库缺少同步歌词而烦恼&…

作者头像 李华
网站建设 2026/5/8 16:52:17

qmcdump终极指南:3分钟解锁QQ音乐加密文件,让音乐自由播放

qmcdump终极指南&#xff1a;3分钟解锁QQ音乐加密文件&#xff0c;让音乐自由播放 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmc…

作者头像 李华
网站建设 2026/5/8 16:52:15

工业级单板计算机SBCPRO-X51解析与应用指南

1. FORTEC SBCPRO-X51工业级单板计算机概述FORTEC SBCPRO-X51是一款采用Intel Atom x7211RE Amston Lake双核处理器的3.5英寸工业级无风扇单板计算机。这款SBC最显著的特点是支持通过M.2扩展模块添加USB-C DisplayPort或V-By-One显示接口&#xff0c;为工业自动化和物联网应用提…

作者头像 李华
网站建设 2026/5/8 16:52:15

开源ThunderScope示波器:高性能低成本解决方案

1. 项目概述&#xff1a;开源ThunderScope示波器作为一名电子工程师&#xff0c;我一直在寻找价格合理且性能强大的示波器解决方案。传统台式示波器动辄上万美元的价格让人望而却步&#xff0c;而市面上大多数USB示波器又存在采样率低、带宽受限等问题。ThunderScope的出现让我…

作者头像 李华
网站建设 2026/5/8 16:52:04

全域矩阵运营数据体系建设:数仓建模、指标体系与全链路闭环实战

摘要当前全域矩阵运营已进入精细化竞争阶段&#xff0c;但超过 80% 的企业仍停留在「重内容发布、轻数据建设」的粗放模式&#xff0c;普遍面临多平台数据口径不统一、公域私域数据脱节、指标体系混乱、无法实现全链路归因与 ROI 精准核算的核心痛点。本文基于企业级矩阵运营的…

作者头像 李华