首页 > 代码库 > LeetCode: Linked List Cycle 解题报告

LeetCode: Linked List Cycle 解题报告

Linked List Cycle

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

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

SOLUTION 1:

经典快慢指针问题。如果存在环,fast, slow必然会相遇。就像2个速度不一样的人在环形跑道赛跑,总有一个时间他们会相遇。

如果fast到达了null,就是没有环,可以返回false.

 1 package Algorithms.list; 2  3 import Algorithms.algorithm.others.ListNode; 4  5 /** 6  * Definition for singly-linked list. 7  * class ListNode { 8  *     int val; 9  *     ListNode next;10  *     ListNode(int x) {11  *         val = x;12  *         next = null;13  *     }14  * }15  */16 public class HasCycle {17     public boolean hasCycle(ListNode head) {18         if (head == null) {19             return false;20         }21         22         ListNode slow = head;23         ListNode fast = head;24         25         while (fast != null && fast.next != null) {26             slow = slow.next;27             fast = fast.next.next;28             if (slow == fast) {29                 return true;30             }31         }32         33         return false;34     }35 }

 

LeetCode: Linked List Cycle 解题报告