天天看點

力扣刷題 -- 環形連結清單

這是一道經典面試題:給定一個連結清單,判斷連結清單中是否有環。

例如:給定 head = [3,2,0,-4],判斷對外連結表中有一個環,其尾部連接配接到第二個節點。

力扣刷題 -- 環形連結清單

對于這道題的解題思路是采用快慢指針:給定兩個指針慢指針slow和快指針fast,例如慢指針slow走一步,快指針fast走兩步,當slow和fast(slow和fast指向的節點一樣)相遇即有環。

package 連結清單;

/**
 * https://leetcode-cn.com/problems/linked-list-cycle/
 *
 * @author boyas
 * @create 2021/6/19 2:09
 */
//采用快慢指針:例如慢指針slow走一步,快指針fast走兩步,slow和fast(slow和fast指向的節點一樣)相遇即有環
public class _141_環形連結清單 {
    //為了表示給定連結清單中的環,我們使用整數 pos 來表示連結清單尾連接配接到連結清單中的位置(索引從 0 開始)。
    // 如果 pos 是 -1,則在該連結清單中沒有環。
    public boolean hasCycle(ListNode head) {
        if (head == null || head.next == null) return false;
        ListNode slow = head;//頭節點為慢指針slow
        ListNode fast = head.next;//第二個節點為快指針fast
        while (fast != null && fast.next != null) {
            if (fast == slow) return true;
            slow = slow.next;
            fast = fast.next.next;
        }
        return false;
    }
}


           

效率隻有63.86%,不太行哈!

力扣刷題 -- 環形連結清單

繼續閱讀