题目
思路
绝对的经典题目,快慢指针,慢指针一次走两步,快指针一次走一步,直到两指针相遇,则说明有环。
关于评论区看到的一种思路,本质是做标记。这个办法不是很好,一方面,如果测试用例足够全的话,标记内容有可能与val重复,另一方面:
面试的时候我说过这个思路,结果面试官问我:那你遍历之后,原来的数据还能用吗?哎,惨。。
题解
这大概是写的最快的一道题了,三分钟写出来的
// Definition for singly-linked list.
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
class Solution {
public static void main(String[] args) {
// 测试用例
Solution solution = new Solution();
ListNode node = new ListNode(1);
System.out.println(solution.hasCycle(node));
}
public boolean hasCycle(ListNode head) {
ListNode singleStep = head;
ListNode multiStep = head;
while (multiStep != null && multiStep.next != null) {
singleStep = singleStep.next;
multiStep = multiStep.next.next;
if (singleStep == multiStep) return true;
}
return false;
}
}