演算法之(二)判斷一個單鏈表是否有環
思路:如果一個單鏈表中有環,用一個指標去遍歷,永遠不會結束,所以可以用兩個指標,一個指標一次走一步,另一個指標一次走兩步,如果存在環,則這兩個指標會在環內相遇,時間複雜度為O(n)。
拓展問題1:如果單鏈表有環,找出環的入口節點(環的連線點)。
這裡先證明一個定理:碰撞點到連線點的距離=頭指標到連線點的距離
假設單鏈表的總長度為L,頭結點到環入口的距離為a,環入口到快慢指標相遇的結點距離為x,環的長度為r,慢指標總共走了s步,則快指標走了2s步。另外,快指標要追上慢指標的話快指標至少要在環裡面轉了一圈多(假設轉了n圈加x的距離),得到以下關係: s = a + x 2s = a + nr + x =>a + x = nr 設定一個頭指標走了a+x,慢指標從相遇位置繞n圈,最後一定會在相遇點相遇 由上式可知:若在頭結點和相遇結點分別設一指標,同步(單步)前進,則最後一定相遇在環入口結點。
相關推薦
演算法之(二)判斷一個單鏈表是否有環
思路:如果一個單鏈表中有環,用一個指標去遍歷,永遠不會結束,所以可以用兩個指標,一個指標一次走一步,另一個指標一次走兩步,如果存在環,則這兩個指標會在環內相遇,時間複雜度為O(n)。 拓展問題1:如果單鏈表有環,找出環的入口節點(環的連線點)。 這裡先證明一個
如何判斷一個單鏈表是否有環?
算法 查找 public class LinkedListRing{ static class LinkedNode<T>{ private T t ; private LinkedNode<T> next = null; public LinkedNode(T t)
筆試題:判斷一個單鏈表是否有環,如果有,找出環的起始位置
</pre><pre name="code" class="cpp">Node * FindLoop(Node *phead) { Node *p = phead,q = phead,h = phead; while(p && q->next)
如何判斷一個單鏈表是否有環以及環入口
這是一個在我們學習資料結構的時候經常會遇到的問題,今天給大家帶來這個問題的幾種解法。 方法一 最容易想到的辦法就是遍歷單鏈表,如果單鏈表有環的話那麼會進入死迴圈,但是我們不知道單鏈表的長度,所以如果單鏈表長度很長,我們一直向下遍歷,也無法分辨出是單鏈表還
判斷一個單鏈表是否有環
主函式中沒有出現具體的連結串列,主要看判斷有無環函式ExitLoop. 外函式的while迴圈條件的判定:如果fast指標指向NULL,if條件語句不成立,返回flag=0:不存在環。 如果flag走到最後一個結點時,要是不給定一個條件,while繼續執行,flag一次迴圈
排序演算法之(二)選擇排序
原理: 每一次從待排序的資料元素中選出最小(或最大)的一個元素,存放在序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。 思路: n個數進行n-1次排序 每一次排
判斷一個單鏈表是否帶環,並求出環的長度,及環的入口點
單鏈表是否帶環? 用快慢指標分別遍歷這個單鏈表,如果快慢指標能相遇,就代表有環的存在。 環的長度? 當快慢指標相遇時,記錄當前位置,然後走一圈的長度就是環的長度。 環的入口點? 設快指標F走兩個結點,慢指標S走一個結點。 F=2*S; &nb
資料結構——演算法之(033)(兩個有序單鏈表合併為一個有序的單鏈表)
【申明:本文僅限於自我歸納總結和相互交流,有紕漏還望各位指出。 聯絡郵箱:[email protected]】 題目: 兩個有序單鏈表合併為一個有序的單鏈表(預設升序)題目分析: 1、因為兩個連結串列都是有序的,所以首先要記錄那個連結串列頭最小 2、大致
成長記錄貼之springboot+shiro(二) {完成一個完整的許可權控制,詳細步驟}
近一個月比較忙,公司接了一個新專案,領導要求用shiro進行安全管理,而且全公司只有我一個java,從專案搭建到具體介面全是一個人再弄。不過剛好前段時間大概學習了一下shiro的使用,還算順利。 &n
關於連結串列的面試問題(判斷一個單鏈表中是否有環)
判斷一個單鏈表中是否有環 首先連結串列結點宣告如下: struct ListNode { int key; ListNode * next; }; 思路:如果一個單鏈表中有環,用一個指標去遍歷,永遠不會結束,所以可以用兩個指標,一個指標一次走一步,另
程式設計菜鳥到大佬之路:演算法基礎(二)
第二天學習精要 列舉 生理週期 例題2:生理週期 題目描述 人有體力、情商、智商的高峰日子,它們分別每隔23天、 28天和33天出現一次。 對於每個人,我們想知道何時三個高峰落在同一天。 給
基於深度學習的目標檢測演算法綜述(二)—Two/One stage演算法改進之R-FCN
基於深度學習的目標檢測演算法綜述(一):https://blog.csdn.net/weixin_36835368/article/details/82687919 目錄 1、Two stage 1.1 R-FCN:Object Detection via Region-based
【LeetCode-面試演算法經典-Java實現】【114-Flatten Binary Tree to Linked List(二叉樹轉單鏈表)】
原題 Given a binary tree, flatten it to a linked list in-place. For example, Given
每天一道演算法題(二):給定陣列Arr和一個整數aim,請返回哪兩個位置的數可以加出aim來。
給定陣列Arr和一個整數aim,請返回哪兩個位置的數可以加出aim來 例如:arr={2,7,11,15},target = 9 返回{0,1},因為arr[0] + arr[1] = 2 + 7 = 9,可以假設每個數組裡只有一組答案。 大概流程是這樣的: 首先,定義一個
資料結構——演算法之(023)( 單鏈表就地逆置,頭插法)
【申明:本文僅限於自我歸納總結和相互交流,有紕漏還望各位指出。 聯絡郵箱:[email protected]】 題目: 單向連結串列的就地逆置 題目分析: 一、方法很多,這裡使用頭插法 (1)順序遍歷連結串列,並把每個節點從新插入在頭結點後面 (2)
網絡遠程教育實施方案交流之(二)——網絡教育平臺項目的建設
商城 免費 數據 及其 技術 充值 互聯網產品 遠程教育 導出 網絡教育平臺項目的建設的方案能夠自建也能夠採購。但項目是否成功,並終於能夠落地發展,還須要業主方認真的調研和分析,最有效的方法就是利用項目管理的方法,從前期的需求分析、調研、可行性分析,立項
Deep Learning論文筆記之(二)Sparse Filtering稀疏濾波
structure 分布 的確 tlab bolt 期望 有一個 尋找 mean Deep Learning論文筆記之(二)Sparse Filtering稀疏濾波 自己平時看了一些論文,但老感覺看完過後就會慢慢的淡忘,某一天重新拾起來的時候又好像沒有
負載均衡系列之(二)nginx
永遠 實例 表示 特性 反向代理服務器 依據 forward 訪問 子郵件 Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行 其特點是占有內存少,並發能力強,事實上nginx的並發能力
MongoDB學習之(二)java連接
代碼 core UC mongo bte 就是 ava jar包 lan 上一章完了下mongodb的安裝和IDE工具,現在開始使用java進行連接。 第一步:使用jar包, 這裏需要三個包,具體為啥我也不清楚,反正因為報錯,我就按照官方文檔一個個的都下載了。 鏈接:htt
Gitlab管理之(二)--創建項目
images tla class tle ima src type 按鈕 lis 1. Gitlab項目的可見類型Private project: 該級別是只有項目擁有者或者已經得到授權的人可以訪問該項目,或者這些人是該項目組的成員。Internal project: 只要