阿里P7告訴你如何用JAVA程序來查找鏈接列表是否包含循環

阿里P7告訴你如何用JAVA程序來查找鏈接列表是否包含循環

查找鏈表是否包含循環的算法

迭代鏈表時使用快速和慢速兩個指針。快速指針在每次迭代中移動兩個節點,而慢速指針移動到一個節點。如果鏈表包含循環或循環,那麼在迭代過程中,快指針和慢指針都會在某個點上相遇。如果它們不相交,並且快速或慢速將指向空,那麼鏈表就不是循環的,它不包含任何循環。這是精確的算法

  1. 使用快速和慢速兩個指針
  2. 每次迭代快速移動兩個節點,慢速移動一個節點
  3. 如果快速和慢速相遇,則鏈表包含循環
  4. 如果fast指向空或fast.next指向空,則鏈表不是循環的。

下一部分包含Java程序來檢查鏈表是否包含循環,這是上述算法的精確實現。該算法也被稱為Floyd的循環查找算法,通常被稱為Tortoise and Hare算法,用於查找鏈表中的循環。

Java程序檢查鏈表是否為循環

這個Java程序使用LinkedList(不Java.UTI.LIKEDLIST)和鏈表的前一個節點類,修改了添加ToStTrn()方法和AppEntoTead()方法。另外,鏈表的iscyclic()方法用於實現邏輯,以確定鏈表是否包含循環。隨後is cyclic()如果鏈表是循環的,則返回true,否則返回false。

阿里P7告訴你如何用JAVA程序來查找鏈接列表是否包含循環

阿里P7告訴你如何用JAVA程序來查找鏈接列表是否包含循環

測試循環的鏈表

在本節中,我們將使用帶有兩個鏈表的Java main方法測試,一個包含循環而另一個不循環。 您甚至可以為isCyclic()方法編寫JUnit測試用例,以測試不同位置的循環的不同鏈表。 這是鏈表不包含任何循環的第一個測試。

阿里P7告訴你如何用JAVA程序來查找鏈接列表是否包含循環

現在讓我們改變鏈表,使其包含循環

阿里P7告訴你如何用JAVA程序來查找鏈接列表是否包含循環

寫在最後:

歡迎留言討論,如需Java方面的架構資料,我這裡剛好有一份,怎麼領取→→→關注+轉發 然後私信“架構資料” 即可領取

點關注,不迷路,持續更新!!!


分享到:


相關文章: