码迷,mamicode.com
首页 > 其他好文 > 详细

环形链表 II

时间:2020-07-18 11:31:09      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:技术   load   class   快慢指针   移动   要求   info   lse   cycle   

技术图片

技术图片

技术图片

题解:hashset(没有达到进阶的要求)

/**
 * 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) {
        Set<ListNode> set = new HashSet<>();
        ListNode node = head;
        while(node!=null){
            if(set.contains(node)) return node;
            else set.add(node);
            node=node.next;
        }
        return null;
    }
}

题解:双指针
一个慢指针l和一个快指针r同时走,慢指针l一次走1步,快指针r一次走2步。当快慢指针相遇时,让另一个指针l0从头出发和慢指针l同时移动且步长都是1,当l0和l相等时就找到了入口节点。
证明思路:https://juejin.im/post/5e64a20ff265da570a5d5633#heading-2

/**
 * 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) return null;
        ListNode l=head,r=head,l0=head;
        while(true){
            l=l.next;
            r=r.next==null? null:r.next.next;
            if(l==r&&l!=null){
                while(l!=l0){
                    l=l.next;
                    l0=l0.next;
                }
                return l;
            }
            if(r==null){
                return null;
            }
        }

    }
}

技术图片

环形链表 II

标签:技术   load   class   快慢指针   移动   要求   info   lse   cycle   

原文地址:https://www.cnblogs.com/cstdio1/p/13334581.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!