带环链表2

作者: lyoungzzz | 来源:发表于2017-06-28 16:52 被阅读21次

    描述

    给定一个链表,如果链表中存在环,则返回到链表中环的起始节点的值,如果没有环,返回 null。

    样例

    给出 -21->10->4->5, tail connects to node index 1,返回 10
    

    代码实现

    /**
     * Definition for ListNode.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int val) {
     *         this.val = val;
     *         this.next = null;
     *     }
     * }
     */ 
    public class Solution {
        /**
         * @param head: The first node of linked list.
         * @return: The node where the cycle begins. 
         *           if there is no cycle, return null
         */
        public ListNode detectCycle(ListNode head) {  
            if (head == null || head.next == null) {
                return null;
            }
            ListNode fast = head.next;
            ListNode slow = head;
            while (fast != slow) {
                if (fast == null || fast.next == null) {
                    return null;
                }
                fast = fast.next.next;
                slow = slow.next;
            }
            /**while (head != fast.next) {
                head = head.next;
                slow = fast.next;
            }**/
    //用慢指针的next与head比较
            while (head != slow.next) {
                head = head.next;
                slow = slow.next;
            }
            return head;
        }
    }
    
    

    相关文章

      网友评论

        本文标题:带环链表2

        本文链接:https://www.haomeiwen.com/subject/hawucxtx.html