刷题No27. linked-list-cycle-ii(环形链表ii)(java)【链表】

题目:对于一个给定的链表,返回环的入口节点,如果没有环,返回null

思路:找到链表中的环中的一个节点(快慢指针相遇处),一个指针从相遇处出发,一个指针从链表头节点出发,相遇处即为链表中环的起始点。

代码:

package com.company;

public class TestNo27 {
    static class ListNode{
        int val;
        ListNode next;
        ListNode(int x){
            val = x;
            next = null;
        }
    }
    public static void main(String[] args) {
        ListNode head = new ListNode(9);
        head.next = new ListNode(4);
        head.next.next = new ListNode(5);
        head.next.next.next = new ListNode(7);
        head.next.next.next.next = new ListNode(8);
        head.next.next.next.next.next = head;
        TestNo27 t = new TestNo27();
        System.out.println(t.detectCycle(head).val);


    }
    public ListNode detectCycle(ListNode head) {
        if(head == null || head.next == null || head.next.next == null){
            return null;
        }
        ListNode fast = head.next.next;
        ListNode slow = head.next;
        //进行判断是否有环,找到相遇点
        while (fast!=slow){
            if(fast.next!=null && fast.next.next != null){
                fast = fast.next.next;
                slow = slow.next;
            }else{
                return null;
            }
        }
        fast = head;
        while (fast != slow){
            fast = fast.next;
            slow = slow.next;
        }
        return fast;


    }

}
发布了46 篇原创文章 · 获赞 11 · 访问量 3577

猜你喜欢

转载自blog.csdn.net/qq_40664693/article/details/104278930
今日推荐