原题链接在这里:https://leetcode.com/problems/linked-list-cycle/
两个指针,一快runner,每次走两步;一慢walker,每次走一步,若是它俩相遇就是有cycle。
Note: 这里的while loop 终止条件是runner!=null && runner.next!=null, 因为下面会用到 runner.next.next.
这类下面要用到listNode.next的情况,最基本要保证listNode!=null.
AC 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) {
if(head == null)
return false;
ListNode walker = head;
ListNode runner = head;
while(runner!= null && runner.next != null){
walker = walker.next;
runner = runner.next.next;
if(runner == walker)
return true;
}
return false;
}
}