## Description

https://leetcode.com/problems/palindrome-linked-list/

Given a linked list, determine if it has a cycle in it.

To represent a cycle in the given linked list, we use an integer `pos`

which represents the position (0-indexed) in the linked list where tail connects to. If `pos`

is `-1`

, then there is no cycle in the linked list.

**Example 1:**

Input:head = [3,2,0,-4], pos = 1Output:trueExplanation:There is a cycle in the linked list, where tail connects to the second node.

**Example 2:**

Input:head = [1,2], pos = 0Output:trueExplanation:There is a cycle in the linked list, where tail connects to the first node.

**Example 3:**

Input:head = [1], pos = -1Output:falseExplanation:There is no cycle in the linked list.

## Explanation

If any of the node has been visited, the linked list has a cycle.

## Python Solution

```
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def hasCycle(self, head: ListNode) -> bool:
visited = set()
while head != None:
if head not in visited:
visited.add(head)
else:
return True
head = head.next
return False
```

- Time complexity: O(N).
- Space complexity: O(N).

I found that solution very popular and helpful

https://www.youtube.com/watch?v=sfP64T6SmaY&ab_channel=EricProgramming

/** Java Solution **/

/**

* 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||head.next==null||head.next.next==null)

return false;

ListNode fast=head;

ListNode slow=head;

while(fast!=null && fast.next!=null){

fast=fast.next.next;

slow=slow.next;

if(fast==slow)

return true;

}

return false;

}

}