Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
/**
* 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) {
boolean hasCycle = true;
if(head == null)
hasCycle = false;
else{
ListNode first = head;
ListNode second = head;
do{
if(second.next == null || second.next.next == null){
hasCycle = false;
break;
}
else{
first = first.next;
second = second.next;
second = second.next;
}
}while(first != second);
}
return hasCycle;
}
}
The same method as above
/**
* 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) {
boolean hasCycle = false;
if(head != null){
ListNode speedOne = head, speedTwo = head;
while(!hasCycle){
if(speedTwo == null || speedTwo.next == null)
break;
else{
speedTwo = speedTwo.next.next;
speedOne = speedOne.next;
hasCycle = (speedOne == speedTwo)? true : false;
}
}
}
return hasCycle;
}
}