鏈表中環的入口結點

題目描述
給一個鏈表,若其中包含環,請找出該鏈表的環的入口結點,否則,輸出null。

分析
在這里插入圖片描述

  • 第一步:確定一個鏈表中是否有環
    我們可以用兩個指針來解決,定義兩個指針,同時從鏈表的頭結點觸發,一個指針一次走一步,另一個指針一次走兩步。如果走的塊的指針追上了走的慢的指針,那么鏈表就包含環。如果走得快的只恨走到鏈表的末尾都沒有追上走的慢的,那么鏈表就沒有環。
  • 第二步:如何找到環的入口
    還是利用兩個指針來解決,先定義兩個指針p1p_1p1?p2p_2p2?指向鏈表的頭結點,如果鏈表中的環有n個節點,那么指針p1p_1p1?現在鏈表上向前移動n步,然后兩個指針按相同速度向前移動,當第二個指針指向環的節點入口時,第一個指針已經圍繞著環走了一圈,又回到入口節點。
  • 第三步:如何知道環中節點的數目
    在第一步中判斷一個鏈表里是否有環時用到一快一慢兩個指針,如果兩個指針相遇,那么有環,兩個指針相遇的節點一定在環中,那么就可以從這個節點觸發,一邊繼續向前移動一邊計數,當再次回到這個節點時就可以得到環中節點的點數。

節點類:

public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}

實現類:

public class Solution {public ListNode EntryNodeOfLoop(ListNode pHead){if(pHead == null || pHead.next == null) {return null;}ListNode meet = MeetNode(pHead);if(meet == null ) {return null;}int nodeInLoop = 1;ListNode pNode = meet, pNode2 = pHead;while(pNode.next != meet) {pNode = pNode.next;++nodeInLoop;}pNode = pHead;for (int i = 0; i < nodeInLoop; i++) {pNode = pNode.next;}while(pNode != pNode2) {pNode = pNode.next;pNode2 = pNode2.next;}return pNode;}public ListNode MeetNode(ListNode head) {if(head == null) {return null;}ListNode slow = head.next;if(slow == null) {return null;}ListNode fast = slow.next;while(fast != null && slow != null) {if(fast == slow) {return slow;}slow = slow.next;fast = fast.next;if(fast != null) {fast = fast.next;}}return null;}}

轉載于:https://www.cnblogs.com/lishanlei/p/10707651.html

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

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

相關文章

java 線程之線程狀態

Thread 類中的線程狀態&#xff1a; public enum State {NEW,//新建RUNNABLE,// 執行態BLOCKED, //等待鎖&#xff08;在獲取鎖的池子里&#xff09;WAITING,//等待狀態TIMED_WAITING,//定時等待TERMINATED; //終止 } 創建狀態&#xff08;NEW&#xff09;&#xff1a;當一個線…

目標元素拖動

<div class"box"><div class"title">拖拽效果</div></div>* {margin: 0;padding: 0;}.box {width: 350px;height: 300px;border: 1px solid #ccc;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);cursor…

操作系統原理之內存管理(第四章第二部分)

一、基本分頁存儲管理方式 1、分?存儲管理的基本原理&#xff1a; 頁&#xff1a;將?個進程的邏輯地址空間分成若?個??相等的?頁框&#xff1a;將物理內存空間分成與???相同的若?個存儲塊分?存儲&#xff1a;將進程中的若??分別裝?多個可以不相鄰的?框中頁內碎片…

C#代碼總結02---使用泛型來獲取Asp前臺頁面全部控件,并進行屬性修改

該方法&#xff1a;主要用于對前臺頁面的不同類型&#xff08;TextBox、DropDownList、等&#xff09;或全部控件進行批量操作&#xff0c;用于批量修改其屬性&#xff08;如&#xff0c;Text、Enable&#xff09;。 private void GetControlList<T>(ControlCollection c…

d3.js 教程 模仿echarts柱狀圖

由于最近工作不是很忙&#xff0c;隧由把之前的charts項目用d3.js重寫的一下&#xff0c;其實d3.js文檔很多&#xff0c;但是入門不是很難&#xff0c;可是想真的能做一個完成的&#xff0c;交互良好的圖還是要下一番功夫的。今天在echarts找到了一個柱狀圖&#xff0c;如圖。 …

簡單的動畫函數封裝(2)

<div></div><!-- <span></span> --><button class"btn1">點擊500</button><button class"btn2">點擊800</button>div{width: 100px;height: 100px;background-color: red;position: absolute;top: …

【蔡勒公式 】根據給定的年月日求出對應星期幾

蔡勒公式 蔡勒&#xff08;Zeller&#xff09;公式&#xff0c;是一個計算星期的公式&#xff0c;隨便給一個日期&#xff0c;就能用這個公式推算出是星期幾。時間復雜度&#xff1a;O(1)。具體的在紅書P229有。 若要計算的日期是在1582年10月4日或之前&#xff0c;公式則為&am…

MFC的程序,不想顯示窗口,任務欄里也不顯示

在dialog的oninitdialog里設置如下屬性&#xff0c;很簡單&#xff0c;網上一些亂七八糟的做法&#xff0c;一行代碼就能搞定啊 SetWindowPos(&CWnd::wndNoTopMost,0,0,0,0,SWP_HIDEWINDOW); ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); 轉載于:https://www.cnblog…

放大鏡制作(2)—此方法比較容易理解

<div class"box" id"box"><!--左側的盒子--><div class"left_img"><!--圖片--><img src"images/small.jpg" class"aaa" alt"小圖片"/><!--黃色小盒子--><div class"…

call / apply / bind

對于 call / apply / bind 來說&#xff0c;他們的首要目的是用于改變執行上下文的 this 指針。 call / apply 對 call / apply 的使用&#xff0c;一般都如下&#xff0c;用于改變執行環境的上下文。只是 call 接受的是一個一個的參數&#xff0c;而 apply 則是接受的是一個參…

js(Dom+Bom)第八天—Swiper(插件)

Swiper插件(庫) 01-基本介紹 Swiper 是一款免費以及輕量級的移動設備觸控滑塊的js框架&#xff0c;使用硬件加速過渡&#xff08;如果該設備支持的話&#xff09;。主要使用于移動端的網站、移動web apps&#xff0c;native apps和hybrid apps。主要是為IOS而設計的&#xff…

第七節:EF Core調用SQL語句和存儲過程

一. 查詢類(FromSql) 1.說明 A. SQL查詢必須返回實體的所有屬性字段。 B. 結果集中的列名必須與屬性映射到的列名相匹配。 C. SQL查詢不能包含關聯數據 D. 除Select以為的其它SQL語句無法運行。 2.調用SQL語句的幾種情況 A. 基本的原生SQL查詢 B. 利用$內插語法進行傳遞 C. 原生…

沒用的一些水貨

1. 不遞歸的子函數加上inline會跑的很快。 2. 在稠密圖中用dijkstra堆優化會導致跑的很慢。 3. 連著開幾個數組的話&#xff0c;有可能越界了評測機卻返回WA。 4. 如果你用的Dev-C&#xff0c;那么有的時候會出現一些莫名其妙的編譯錯誤。請檢查是否存在未關閉的代碼生成的.exe…

js(Dom+Bom)第八天

JavaScript 移動端事件介紹 touch事件類型 移動設備上無法使用鼠標&#xff0c;當手指按下屏幕的時候會觸發 click,mousedown,mouseup事件&#xff0c;但是在移動設備上有專門的事件&#xff1a; touch 備注&#xff1a; 在移動端touch事件需要通過事件監聽的方式添加touchsta…

程序員計算器HEX、EDC、OCT等等的意思

binary 二進制 對應的是 BINoctal 八進制的 ---- OCThexadecimal 十六進制的 --- HEXdecimal 十進制的 -- DEC 轉載于:https://www.cnblogs.com/132818Creator/p/11459984.html

為什么mysql 5.7.24啟停不顯示錯誤信息?log-error_verbosity參數

關鍵詞&#xff1a;log-error_verbosity &#xff0c;mysql啟停沒有信息&#xff0c;mysql啟停不顯示錯誤信息&#xff0c;mysql不顯示啟停信息 原因就是因為 log-error_verbosity 2 被設置成了1/2&#xff0c;需要設置成3才行。 轉載自&#xff1a;https://www.cnblogs.com/k…

ASP.NET Core 3.0中使用動態控制器路由

原文&#xff1a;Dynamic controller routing in ASP.NET Core 3.0 作者&#xff1a;Filip W 譯文&#xff1a;https://www.cnblogs.com/lwqlun/p/11461657.html 譯者&#xff1a;Lamond Lu 譯者注 今天在網上看到了這篇關于ASP.NET Core動態路由的文章&#xff0c;感覺蠻有意思…

Petrozavodsk Winter Camp, Warsaw U, 2014, A The Carpet

一個地圖上有若干障礙&#xff0c;問允許出現一個障礙的最大子矩形為多大&#xff1f; 最大子矩形改編 #include<bits/stdc.h> using namespace std; #define rep(i, j, k) for (int i int(j); i < int(k); i) #define dwn(i, j, k) for (int i int(j); i > int…

d3.js 教程 模仿echarts折線圖

今天我們來仿echarts折線圖,這個圖在echarts是折線圖堆疊&#xff0c;但是我用d3改造成了普通的折線圖&#xff0c;只為了大家學習&#xff08;其實在簡單的寫一個布局就可以&#xff09;。廢話不多說商行代碼。 1 制作 Line 類 class Line {constructor() {this._width 1100;…