【数据结构与算法】判断单链表是否有环的算法
生活随笔
收集整理的這篇文章主要介紹了
【数据结构与算法】判断单链表是否有环的算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
帶環鏈表
這里的帶環單鏈表可不是環形單鏈表,這個環可能是我們不想要的,所以需要檢測。
我們就不假設有一個打結狀的環了,那樣跑到哪里去也不清楚,這里的“帶環鏈表”,環必然是在末端。
這是經典問題,方法眾多,但方法效率差別很大,本文試舉三例,并對較優算法加以編程實現。
算法一:暴力查重
雙指針即可,前一個指針在遍歷單鏈表,后一個指針遍歷前指針之前的所有結點是否有與前指針相同的結點。
如果能跑到結尾,自然是無環的,否則就跑下去,總會發現的。
這算法很暴力,不好。
算法二:HashSet查重
不需要雙指針,但需要多費一些空間,建一個HashSet,里面裝每一個搜索過的結點,搜到的結點如果Set里有,就是說明了有環,否則就把新搜到的結點加入HashSet里面。搜到盡頭就是沒環。
算法三:雙指針
前一個指針一次跳兩個結點,后一個結點一次跳一個結點,如果有環,則前后必能相遇。如果前者跑到盡頭就說明沒環。
算法核心代碼(Java語言描述):
private boolean isCircular總結
以上是生活随笔為你收集整理的【数据结构与算法】判断单链表是否有环的算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据结构与算法】浅析堆栈以及数据结构的
- 下一篇: 软件工程知识——软件配置管理