Given A linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
On Cycle, the first idea is naturally done with HashMap. Note When using the Hashmap.put () method, value can be set to a random number.
Because we are only checking if key is duplicated, value is not very meaningful here.
The code is as follows. ~
/** * 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) { hashmap<listnode,integer> hash=new Ha Shmap<listnode,integer> (); if (head==null) { return false; } while (head!=null) { if (Hash.containskey (head)) { return true; } Hash.put (head,1); Head=head.next; } return false; }}
But then look at follow up where the requirements are without extra space, so HashMap is temporarily unavailable.
You can do it with the pointer. Fast and Slow pointer. (Fase/slow) (fast every two steps, slow is a step.) )
If there is a cycle, the fast and slow hands will meet.
/** * 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) { return false; } ListNode Fast=head; ListNode Slow=head; while (fast!=null&&fast.next!=null) { slow=slow.next; Fast=fast.next.next; if (slow==fast) { return true; } } return false; }}
[Leetcode] Linked List Cycle