【鏈表】- 環形鏈表 II

1. 對應力扣題目連接

  • 環形鏈表 II

2. 實現思路

a. 鏈表圖示:

在這里插入圖片描述

b. 檢測鏈表中是否存在環,即:會相交

思路:

  • 使用 Floyd 的龜兔賽跑算法(Floyd’s Tortoise and Hare algorithm),即快慢指針法,可以有效解決此問題。

方案:

  • 初始化兩個指針,慢指針 (slow) 每次走一步,快指針 (fast) 每次走兩步。
    如果鏈表中存在環,快指針和慢指針最終會在環內相遇。
    如果鏈表無環,快指針會先到達鏈表末端。如上圖示。
c. 找到環的起點,即:環形入口點

思路:

  • 因為環會相交,所有里程數一定相等,而快慢指針的速度差為2:1;
  • 所以:快慢總的里程等式為(n代表快指針的圈數):(x+y)* 2 = x+y + n(y+z)
  • 推算:
  • x+y = n(y+z)
  • x = n(y+z) -y
  • x = (n-1)(y+z) +z
  • 如:n=1;則 x=z

方案:

  • 當快慢指針在環內相遇時,將其中一個指針重置到鏈表頭部。
  • 兩個指針每次都只走一步,當它們再次相遇時,相遇的節點即為環的起點。

3. 實現案例代碼

public class CircularListIiTwo {public static void main(String[] args) {// 示例鏈表:[3,2,0,-4],尾部連接到索引 1ListNode head = new ListNode(3);ListNode node1 = new ListNode(2);ListNode node2 = new ListNode(0);ListNode node3 = new ListNode(-4);head.next = node1;node1.next = node2;node2.next = node3;node3.next = node1;  // 構成環ListNode cycleNode = detectCycle(head);if (cycleNode != null) {System.out.println("Cycle starts at node with value: " + cycleNode.val);} else {System.out.println("No cycle");}}public static ListNode detectCycle(ListNode head) {if (head == null || head.next == null) {return null;}ListNode slow = head;ListNode fast = head;// 使用快慢指針檢測環while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;// 快慢指針相遇,說明存在環if (slow == fast) {ListNode ptr = head;// 找到環的起點while (ptr != slow) {ptr = ptr.next;slow = slow.next;}return ptr;}}// 無環return null;}
}class ListNode {public int val;public ListNode next;ListNode() {}ListNode(int val) {this.val = val;}ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}

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

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

相關文章

二分法求函數的零點 信友隊

題目ID&#xff1a;15713 必做題 100分 時間限制: 1000ms 空間限制: 65536kB 題目描述 有函數&#xff1a;f(x) 已知f(1.5) > 0&#xff0c;f(2.4) < 0 且方程 f(x) 0 在區間 [1.5,2.4] 有且只有一個根&#xff0c;請用二分法求出該根。 輸入格式 &#xff08;無…

Mysql查詢近半年每個月有多少天

Mysql 查詢近6個月每個月有多少天&#xff1a; SELECT DATE_FORMAT(DATE_ADD(NOW(),INTERVAL-(CAST( help_topic_id AS SIGNED INTEGER )) MONTH ), %Y-%m) as months,DAY(LAST_DAY(CONCAT(DATE_FORMAT(DATE_ADD(NOW(),INTERVAL-(CAST( help_topic_id AS SIGNED INTEGER )) MO…

【區塊鏈+跨境服務】跨境出口電商溯源 | FISCO BCOS應用案例

當前跨境出口電商已成為帶動我國外貿發展的中堅力量&#xff0c;尤其疫情特殊時期&#xff0c;成為推動經濟增長的一個重要組成 部分。但是跨境出口電商流程長、環節多&#xff0c;且需輾轉于不同的服務商以及國家之間&#xff0c;監管與定位也相對困難&#xff0c;容 易出現諸…

兩段序列幀動畫播放,在ios機型上出現閃屏

使用場景&#xff1a;兩段序列幀動畫連接播放&#xff0c;先播放第一段播一次&#xff0c;再播放第二段&#xff0c;第二段循環播放&#xff0c;在ios機型上出現動畫閃動&#xff0c;播放不正常。 錯誤的寫法&#xff1a;把每一段序列幀動畫單獨寫在了定義的動畫里 .gacha-bg…

開源軟件項目的發展趨勢與參與經驗

目錄 前言1. 開源項目的發展現狀1.1 開源項目的快速增長1.2 企業對開源項目的重視 2. 開源社區的活躍度2.1 開源社區的多樣性2.2 社區活動的豐富性 3. 開源項目在技術創新中的作用3.1 促進技術的快速迭代3.2 提供靈活的解決方案 4. 參與開源項目的經驗和收獲4.1 如何選擇開源項…

從0-1搭建一個web項目(頁面布局詳解)詳解

本章分析頁面布局詳解詳解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 開源的后臺管理框架。在一定程度上節省您的開發效率。另外本項目還封裝了一些常用組件、hooks、指令、動態路由、按鈕級別權限控制等功能。感興趣的小伙伴可以訪問源碼點個贊 地…

【系統架構設計師】九、軟件工程(軟件開發生命周期|McCabe度量法|系統轉換|系統維護|凈室軟件工程|基于構件的軟件工程)

目錄 九、軟件開發生命周期和工具 十、McCabe度量法 十一、系統轉換 11.1 遺留系統 11.2 系統轉換 11.3 系統維護 十二、凈室軟件工程 十三、基于構件的軟件工程 13.1 構件特征 13.2 構件模型要素 13.3 CBSE過程 13.4 構件組裝 相關推薦 歷年真題練習 九、軟件開…

DOM 基本操作 - 事件基礎

theme: smartblue 一、事件概述 JavaScript使我們有能力創建動態頁面&#xff0c;而事件是可以被JavaScript偵測到的行為。 簡單理解: 觸發---響應機制。 網頁中的每個元素都可以產生某些可以觸發JavaScript的事件&#xff0c;例如&#xff0c;我們可以在用戶點擊某按鈕時產生一…

libvirt qemu添加新類型磁盤格式

目錄 前言 1 qemu部分 1.1 磁盤格式驅動創建 1.2 json文件創建數據結構對象&#xff1a; 2 libvirt部分&#xff1a; 2.1 對應關系設置 2.2參設向指令格式轉換 前言 qemu中有很多虛擬機磁盤格式&#xff0c;比如較為熟悉的qcow2&#xff0c;luks&#xff0c;r…

C語言文件操作技術詳解

C語言提供了一套強大的文件操作API&#xff0c;允許開發者進行文件讀寫、訪問和管理。本文將深入探討C語言文件操作的背后的技術&#xff0c;包括基本文件操作、文件讀寫以及文件權限和屬性。我們將通過詳細的解釋和實用的代碼案例來展示如何有效地使用這些技術。 第一部分&am…

C++ //練習 14.52 在下面的加法表達式中分別選用了哪個operator+?列出候選函數、可行函數及為每個可行函數的實參執行的類型轉換:

C Primer&#xff08;第5版&#xff09; 練習 14.52 練習 14.52 在下面的加法表達式中分別選用了哪個operator&#xff1f;列出候選函數、可行函數及為每個可行函數的實參執行的類型轉換&#xff1a; struct LongDouble{//用于演示的成員opeartor&#xff1b;在通常情況下是個…

自動駕駛技術的原理

自動駕駛汽車利用視覺識別功能來感知周圍環境并做出駕駛決策。以下是自動駕駛汽車如何利用視覺識別功能及其原理的詳細說明&#xff1a; ### 視覺識別在自動駕駛中的應用 1. **目標檢測&#xff08;Object Detection&#xff09;**&#xff1a;識別并定位道路上的其他車輛、行人…

【安全設備】EDR

一、什么是EDR EDR即集檢測、防御、運維功能于一體的主機安全及管理系統。EDR是一款集成了豐富的系統加固與防護、網絡加固與防護等功能的主機安全產品。 二、EDR的部署模式 EDR&#xff08;Endpoint Detection and Response&#xff0c;端點檢測和響應&#xff09;的部署方…

開源項目編譯harbor arm架構的包 —— 筑夢之路

GitHub - amy5200/harbor-arm64 先做個記錄&#xff0c;空了再驗證

矩陣分解及其在機器學習中的應用

陣分解是一種廣泛應用于數據挖掘和機器學習領域的技術&#xff0c;它通過將一個高維數據集分解為多個低維的數據集&#xff0c;以降低數據的復雜性、提高計算效率&#xff0c;并發現數據中的隱含結構。本文將詳細介紹矩陣分解的基本概念、主要方法及其在機器學習中的應用。 一、…

JWT總結

JWT&#xff08;JSON Web Tokens&#xff09;是一種用于在雙方之間安全傳輸信息的簡潔的、URL安全的令牌標準。以下是關于JWT的結構、作用、優點以及可能出現的問題的詳細解答&#xff1a; 一、JWT的結構 JWT的結構由三個部分組成&#xff0c;它們通過.&#xff08;點&#x…

fastadmin框架后臺列表固定第一行列表固定頭部

在列表中&#xff0c;如果列表字段很多&#xff0c;并且每頁數量很多&#xff0c;往下拉的時候就不好辨別數據是哪個字段的&#xff0c;對用戶造成不好的瀏覽體驗。 通過以下方法&#xff0c;可以實現將列表的第一行&#xff0c;也就是頭部&#xff0c;固定在第一行顯示&#…

TLS與SSL的區別

目錄 一、協議版本二、安全性三、性能四、兼容性五、總結 TLS&#xff08;Transport Layer Security&#xff09;和SSL&#xff08;Secure Sockets Layer&#xff09;都是為了保障互聯網通信安全而設計的協議&#xff0c;主要用于加密客戶端與服務器之間的數據傳輸。盡管它們的…

14-62 劍和詩人36 - 混合專家 (MoE) 擴展 AI 視野

了解混合專家 (MoE) 混合專家 (MoE) 是一種機器學習技術&#xff0c;它將多個“專家”神經網絡模型組合成一個更大的模型。MoE 的目標是通過組合專業專家&#xff08;每個專家專注于不同的子領域&#xff09;來提高 AI 系統的準確性和能力。 MoE 模型的一些關鍵特征&#xff1…

探索Kotlin:從K1到K2

人不走空 &#x1f308;個人主頁&#xff1a;人不走空 &#x1f496;系列專欄&#xff1a;算法專題 ?詩詞歌賦&#xff1a;斯是陋室&#xff0c;惟吾德馨 嘿&#xff0c;小伙伴們&#xff01;今天我們來聊聊Kotlin&#xff0c;這個在安卓開發圈里越來越火的編程語言。…