题目
给定一个链表,判断链表中是否有环。
进阶:
你能否不使用额外空间解决此题?
解题思路
- 创建两个指针,一个跑的快,一个跑的慢。
- 当跑的快的和跑的慢的到一个位置说明成环, 否则不成环。
代码实现
/**
* 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 quick = head; // 快指针
ListNode slow = head; // 慢指针, 两指针同一起点
// 循环结束条件,任意一指针指向null
while (quick != null && quick.next != null) {
quick = quick.next.next;
slow = slow.next;
if (quick == slow) {
return true;
}
}
// 快的没有追过慢的一圈则不成环,返回false
return false;
}
}