diff --git a/LinkedListCycle.java b/LinkedListCycle.java new file mode 100644 index 0000000..a7db50f --- /dev/null +++ b/LinkedListCycle.java @@ -0,0 +1,38 @@ +/* + Author: King, higuige@gmail.com + Date: Oct 5, 2014 + Problem: Linked List Cycle + Difficulty: Easy + Source: http://oj.leetcode.com/problems/linked-list-cycle/ + Notes: + Given a linked list, determine if it has a cycle in it. + Follow up: + Can you solve it without using extra space? + + Solution: two pointers. +*/ + +/** + * 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 slow = head, fast = head; + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + if (slow == fast) break; + } + if (fast == null || fast.next == null) return false; + return true; + } +} \ No newline at end of file diff --git a/LinkedListCycleII.java b/LinkedListCycleII.java new file mode 100644 index 0000000..44dd022 --- /dev/null +++ b/LinkedListCycleII.java @@ -0,0 +1,43 @@ +/* + Author: King, wangjingui@outlook.com + Date: Jan 02, 2015 + Problem: Linked List Cycle II + Difficulty: Easy + Source: http://oj.leetcode.com/problems/linked-list-cycle-ii/ + Notes: + Given a linked list, return the node where the cycle begins. If there is no cycle, return null. + Follow up: + Can you solve it without using extra space? + + Solution: ... +*/ + +/** +* Definition for singly-linked list. +* class ListNode { +* int val; +* ListNode next; +* ListNode(int x) { +* val = x; +* next = null; +* } +* } +*/ +public class Solution { + public ListNode detectCycle(ListNode head) { + if (head == null || head.next == null) return null; + ListNode slow = head, fast = head; + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + if (slow == fast) break; + } + if (fast == null || fast.next == null) return null; + slow = head; + while (slow != fast) { + slow = slow.next; + fast = fast.next; + } + return slow; + } +} \ No newline at end of file