极简算法刷题 - 5.链表中环的入口点

文章目录

  • 题目
  • 思路
  • 代码


题目

牛客:链表中环的入口点
极简算法刷题 - 5.链表中环的入口点_第1张图片
极简算法刷题 - 5.链表中环的入口点_第2张图片


思路

  1. 快慢双指针先判断是否有环
  2. 如果有环,快指针从head和慢指针同时开始移动,相遇即为环的入口点

代码

/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead) {
        ListNode l = pHead;
        ListNode r = pHead;

        boolean hasCycle = false;
        while (r != null && r.next != null) {
            l = l.next;
            r = r.next.next;
            if ((hasCycle = l == r)) break;
        }
        if(!hasCycle) return null;
        r = pHead;
        while (l != r) {
            l = l.next;
            r = r.next;
        }
        return l;
    }
}

你可能感兴趣的:(算法刷题,链表,算法,数据结构)