Linked List Cycle
Given a linked list, determine if it has a cycle in it.
判断某个链表是否有环。
方法一:
用一个hashmap来存放访问过的节点,通过比较当前节点是否存在map中来判断是否有环:
/** * 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) { Map<ListNode,Integer> map = new HashMap<ListNode,Integer>(); while(head!=null) { if(!map.containsKey(head)) { map.put(head,1); head = head.next; } else return true; } return false; } }
方法二:
用2个指针,慢指针一次后移一步,快指针一次后移2步,若有环则快指针会与慢指针相遇:
/** * 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) { ListNode slow = head; ListNode fast = head; try { while(fast!=null&&slow!=null) { fast = fast.next.next; slow = slow.next; if(fast==slow) return true; } }catch(Exception e){ return false; } return false; } }