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

leetcode---对于一个给定的链表,返回环的入口节点,如果没有环,返回null_第1张图片

leetcode---对于一个给定的链表,返回环的入口节点,如果没有环,返回null_第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) {
        //1.链表为空,或只有一个结点
        if (head == null || head.next == null){
            return null;
        }

        //2.通过快慢指针查找相遇点
        ListNode slow = head;
        ListNode fast = head;
        while(fast!=null && fast.next!=null){
            slow=slow.next;
            fast=fast.next.next;
            
            //3.根据相遇点,找出环开始的位置
            if(fast==slow){
                ListNode temp = head;//从第一个位置开始遍历
                while(temp!=slow){//到相遇点时停止,即环开始的结点
                    slow = slow.next;
                    temp = temp.next;
                }
                return slow;
            }
            
        }//while
        return null;
      }
}

leetcode---对于一个给定的链表,返回环的入口节点,如果没有环,返回null_第3张图片

你可能感兴趣的:(leetcode,链表,单链表,java)