【LeetCode】算法詳解#15 ---環形鏈表II

1.題目描述????????

????????給定一個鏈表的頭節點 ?head?,返回鏈表開始入環的第一個節點。?如果鏈表無環,則返回?null

如果鏈表中有某個節點,可以通過連續跟蹤?next?指針再次到達,則鏈表中存在環。 為了表示給定鏈表中的環,評測系統內部使用整數?pos?來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。如果?pos?是?-1,則在該鏈表中沒有環。注意:pos?不作為參數進行傳遞,僅僅是為了標識鏈表的實際情況。

不允許修改?鏈表。

提示:

  • 鏈表中節點的數目范圍在范圍?[0, 104]?內
  • -105 <= Node.val <= 105
  • pos?的值為?-1?或者鏈表中的一個有效索引

2.解決思路

? ? ? ? 這道題目相比上一道題目,要求有一些變化,現在我們需要返回鏈表入環的點。所以上一道題的解法不能夠復用,因為我們并不知道他們在哪個位置相遇。

? ? ? ? 為了完成這道題目,可以這樣思考,因為首先要找到相遇點,所以不可避免我們還是要用到快慢指針,而解題的關鍵就是如何判斷相遇點的位置關系。

????????設鏈表中環外部分的長度為 a。slow 指針進入環后,又走了 b 的距離與 fast 相遇。此時,fast 指針已經走完了環的 n 圈,因此它走過的總距離為 a+n(b+c)+b=a+(n+1)b+nc。

,任意時刻,fast 指針走過的距離都為 slow 指針的 2 倍。因此,我們有

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? a+(n+1)b+nc=2(a+b)?a=c+(n?1)(b+c)
有了 a=c+(n?1)(b+c) 的等量關系,我們會發現:從相遇點到入環點的距離加上 n?1 圈的環長,恰好等于從鏈表頭部到入環點的距離。

所以也就是:相遇點距離入環點的距離就等于頭結點距離入環點的距離

3.步驟講解

? ? ? ? 1.因為快指針的存在,先判斷鏈表長度,小于兩個節點則返回null

? ? ? ? 2.定義三個節點,同時指向頭結點,其中pre用于最后一步找入環點位置,其余兩個是快慢指針

? ? ? ? 3.進行循環,條件是遍歷不到空,也就是不為無環鏈表時進行循環。

? ? ? ? 4.先讓慢指針移動一步,然后判斷快指針的下一個節點是否為空,為空返回null,反之快指針移動兩個節點

? ? ? ? 5.當快慢指針相遇時,進行第二步操作,經過上述分析,可知此時讓指向頭結點的pre指針與慢指針slow同時開始移動,他們相遇的位置就是入環點。返回pre即可

4.代碼展示

class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}}public ListNode hasCycle(ListNode head) {if (head == null || head.next == null){return null;}ListNode pre = head;ListNode slow = head;ListNode fast = head;while (fast != null){slow = slow.next;if (fast.next != null){fast = fast.next.next;} else {return null;}if (slow == fast){while (pre != slow){pre = pre.next;slow = slow.next;}return pre;}}return null;}

5.執行結果

在leetcode中測試用例平均耗時0ms

內存分布43.86MB

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/923501.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/923501.shtml
英文地址,請注明出處:http://en.pswp.cn/news/923501.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kafka面試精講 Day 18:磁盤IO與網絡優化

【Kafka面試精講 Day 18】磁盤IO與網絡優化 在“Kafka面試精講”系列的第18天&#xff0c;我們聚焦于磁盤IO與網絡優化。作為支撐百萬級吞吐量的分布式消息系統&#xff0c;Kafka的高性能不僅依賴于優秀的架構設計&#xff0c;更離不開對底層資源——尤其是磁盤和網絡——的極…

ActiveMQ RocketMQ RabbitMQ Kafka選型及應用場景

許多時候我們都將Kafka拿來跟常用的幾個消息隊列作比較&#xff0c;將 Kafka 加入對比使得選型更加全面和實際。但請注意Kafka并非完全適用消息中間件的所有場景。這四款消息中間件定位不同&#xff0c;選擇取決于你的具體場景。消息隊列選型核心定位一句話總結RabbitMQ&#x…

STM32初始化串口重定向后printf調試信息不輸出的問題

STM32初始化串口重定向后調試信息不輸出的問題 Author&#xff1a;明月清了個風Date&#xff1a; 2025/9/9PS&#xff1a;開發stm32F745的過程中發現printf有時候不打印信息&#xff0c;單獨調試確定了串口初始化和重定向正確&#xff0c;但是在系統整體調試的時候雖然正確運行…

PCA9535ECDWR2G 微控制器MCU接口芯片 ON 電子元器件解析

一、PCA9535ECDWR2G ON 元器件解析1. 是什么電子元器件&#xff1f; PCA9535ECDWR2G 是安森美半導體&#xff08;ON Semiconductor&#xff09;生產的一款16位I/O擴展器。它屬于接口芯片類別&#xff0c;具體功能是通過IC總線為微控制器&#xff08;MCU&#xff09;提供額外的通…

大模型中token與tokenizer的區別

TokenToken 的基本概念在大模型&#xff08;如GPT系列&#xff09;中&#xff0c;token是文本處理的最小單位。模型將輸入的文本分割成token序列&#xff0c;每個token對應一個唯一的整數ID&#xff0c;用于模型的內部處理。例如&#xff0c;英文單詞"apple"可能被編…

還在覺得剪輯太難?用對視頻剪輯軟件,讓剪輯變得像拼圖一樣有趣

想制作出精彩的Vlog&#xff0c;擁有一款簡單易用的視頻編輯軟件是關鍵的第一步。如果你曾因為覺得剪輯太復雜、技術門檻太高而望而卻步&#xff0c;那么這篇文章就是為你準備的&#xff0c;因為借助今天簡單易用的視頻編輯軟件&#xff0c;人人都能成為自己生活的導演。本文就…

【ZEGO即構開發者日報】微信公眾號上線“智能回復”功能;2025年8月中國應用/游戲廠商出海收入Top30榜;土耳其宣布將封禁29款社交/社媒應用……

&#x1f4a1;開發者朋友們大家好&#xff0c;這里是 開發者日報&#xff01;歡迎查閱您的實時互動日報。本欄目實時聚焦、每日更新【AI】、【泛娛樂】、【語音交互】、【實時音視頻】等領域熱點&#xff0c;歡迎大家在評論區一起探討&#xff01; &#x1f528;「產品技術」 …

前端WebSocket實時通信實現

在項目中使用WebSocket實現實時通信 WebSocket提供了一種在客戶端和服務器之間建立持久連接的方式&#xff0c;可以實現實時數據交換。下面我將展示如何在前端項目中集成WebSocket功能。 設計思路 我將創建一個簡單的聊天室界面來演示WebSocket的使用&#xff0c;包含以下功能&…

電磁流量計可靠品牌之選,基恩士提供多樣化解決方案

引言在工業自動化領域&#xff0c;流量的精確計量是保障產品質量、優化成本和提升設備效率的關鍵一環。當面臨“電磁流量計的可靠品牌”這一問題時&#xff0c;企業通常需要考量產品的耐用性、測量精度、維護成本以及系統集成能力。流量計在安裝、維護和測量精度方面面臨諸多挑…

NumPy數組與Python列表的賦值行為解析

在Python科學計算中&#xff0c;NumPy數組和Python原生列表是兩種常用的數據結構。理解它們之間的賦值行為差異對于編寫高效、正確的代碼至關重要。本文將深入探討NumPy數組賦值給Python變量的各種情況&#xff0c;揭示背后的內存機制和類型轉換特性。 直接賦值行為分析 當我們…

中國制造難點在哪里?

最近生產一批板子&#xff0c;其中一個進口的連接器為什么能賣我們差不多一千多錢還沒現貨&#xff0c;有時候還禁售&#xff1b;規格書也就寥寥一頁而已&#xff0c;外觀看起來也淡淡無奇&#xff0c;身為制造業強國的我們為什么沒人做呢&#xff1f;你們怎么看&#xff1f;#中…

python 讀取大文件優化示例

核心方法逐行讀取 - 最常用&#xff0c;內存占用O(1)分塊讀取 - 適合超大文件&#xff0c;可控制內存使用內存映射 - 高性能&#xff0c;虛擬內存映射緩沖讀取 - 平衡性能和內存特殊場景處理CSV文件 - 使用pandas的chunksize參數JSON Lines - 逐行解析JSON對象文本分析 - 內存高…

VBA數據結構深度解析:字典對象與集合對象的性能終極對決

VBA數據結構大揭秘:Dictionary與Collection,誰才是性能王者? 某頭部券商的風控系統曾遭遇"數據黑洞"危機:使用Collection處理10萬條交易記錄時,系統響應時間長達47秒,而改用Dictionary后僅需3.2秒——效率差距達14.7倍!這背后是VBA開發者普遍存在的認知盲區:…

【系統分析師】2025年上半年真題:論文及解題思路

更多內容請見: 備考系統分析師-專欄介紹和目錄 文章目錄 試題一:論信息系統運維管理技術與應用 試題二:論軟件系統測試方法及應用 試題三:論信息系統開發方法及應用 試題四:論模型驅動分析方法及應用 試題一:論信息系統運維管理技術與應用 智能運維(AIOps)是以人工智能…

立創·廬山派K230CanMV開發板的進階學習——顏色識別

學習目標&#xff1a;立創廬山派K230CanMV開發板的進階學習——顏色識別學習內容&#xff1a;顏色識別 顏色識別 1. 本節介紹 &#x1f4dd; 學習內容&#xff1a;本節將學習基于顏色閾值的色塊檢測技術&#xff0c;通過定義特定顏色范圍&#xff0c;從攝像頭采集的圖像中識別并…

【實時Linux實戰系列】V4L2 采集零拷貝:DMA-BUF 在低延遲視頻中的應用

在實時視頻處理系統中&#xff0c;視頻幀的高效傳輸和處理是確保系統低延遲和高吞吐量的關鍵。傳統的視頻采集和處理流程中&#xff0c;數據拷貝是一個常見的性能瓶頸&#xff0c;它不僅增加了處理延遲&#xff0c;還可能導致幀間抖動。為了克服這些問題&#xff0c;Linux 提供…

STM32精準控制水流

如何用STM32精準控制水的流量&#xff1f;一、系統組成框圖------------- ------------ ----------- -------------| | | | | | | || 流量傳感器 -----> STM32 ----->| 驅動電路 ----->…

吃透 Vue 樣式穿透:從 scoped 原理到組件庫樣式修改實戰

在 Vue 項目開發中&#xff0c;我們經常會引入 Element Plus、Vant、Ant Design等成熟組件庫來提升開發效率。但即便組件庫提供了基礎樣式配置&#xff0c;實際業務中仍需根據設計需求調整組件內部細節樣式——這時候&#xff0c;「樣式穿透」就成了必須掌握的技能。而要理解樣…

記一次維修網橋經歷

1.前言 前倆天突然下大雨了&#xff0c;大雨過后我也迎來斷網時刻&#xff0c;經過簡單排查發現是網絡的網橋這條線路無法連通。 猜測1 可能是網線損壞&#xff0c;2 網橋損壞 2.拆解 經過測試網線設備后發現是網橋的問題&#xff0c;嘗試reset發現無反應&#xff08;正常情況重…

OceanBase001-入門--里面有的概念不確定文章作為了解使用

目錄資料來源特點支持和不支持的點名詞概念租戶資源池租戶使用資源數據庫表分區示例資料來源 B站視頻 點擊跳轉 特點 分兩個版本 企業版支持Oracle 和MySql 社區版本支持 MySql 這里視頻這么講解的。后續有沒有社區版本什么樣子不知道&#xff0c;請不要噴我 單節點部署 兼…