您的位置:首页 > 其它

1分钟 - Linked List Cycle II

2014-05-03 04:27 330 查看
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?

/**

 * 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) {

        HashSet<ListNode> nodes = new HashSet<ListNode>();

        ListNode current = head;

        while (current != null) {

            if (nodes.contains(current)) {

                return current;

            } else {

                nodes.add(current);

            }

            

            current = current.next;

        }

        return null;

    }

    

}

Follow up :

已经知道怎么做了就么意思了。随便写写3分钟写出来算了。

/**

 * 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) {

        HashSet<ListNode> nodes = new HashSet<ListNode>();

        ListNode slow = head;

        ListNode fast = head;

        while (fast != null) {

            fast = fast.next;

            if (fast == null) {

                return null;

            }

            fast = fast.next;

            

            slow = slow.next;

            

            if (slow == fast) {

                break;

            }

        }

        

        if (fast == null) {

            return null;

        }

        

        fast = head;

        while (fast != slow) {

            slow = slow.next;

            fast = fast.next;

        }

        return fast;

    }

    

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: