Linked List Cycle——LeetCode

Given a linked list, determine if it has a cycle in it.

Follow up:
Can you solve it without using extra space?

题目大意:给定一个链表,判断是否有环?

解题思路:

解法一:快慢指针,如果有环,那么快慢指针总会相遇,有环;否则快的遍历完整个链表,无环。

解法二:HashSet保存节点,如果下一个节点在set中出现过,那么有环,否则直到遍历完整个链表,无环。

Talk is cheap>>

解法一:

    public boolean hasCycle(ListNode head) {

        if (head == null || head.next == null) {

            return false;

        }

        ListNode slow = head;

        ListNode fast = head;

        while (fast.next != null && fast.next.next != null) {

            fast = fast.next.next;

            slow = slow.next;

            if (slow == fast) {

                return true;

            }

        }

        return false;

    }

解法二:

    public boolean hasCycle2(ListNode head) {

        if (head == null || head.next == null) {

            return false;

        }

        Set<ListNode> set = new HashSet<>();

        while (head != null) {

            if (set.contains(head)) {

                return true;

            }

            set.add(head);

            head = head.next;

        }

        return false;

    }

 

你可能感兴趣的:(LeetCode)