141. Linked List Cycle
1. 问题描述:
输入是一个链表,输出是判断该链表是否有圈。
2. 解决思路:
可以使用Set存储链表每个元素,遍历链表,然后比较链表元素是否有重复,但这是一个耗费空间的思路;
于是,我们引入两个快慢指针同时去遍历链表,快指针比慢指针快一步。如果有圈的话,快指针一定会和慢指针相遇。如果没有圈,快指针一定会先到链表表尾。
3. java代码:
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode slow = head;
ListNode fast = head;
while(fast != null && fast.next!=null){
slow = slow.next;
fast = fast.next.next;
if(slow == fast)
return true;
}
return false;
}
}
4. 算法效果