剣は、オファーのリンクリスト内のリングのエントリノードを指します

ここに画像の説明を挿入
ここに画像の説明を挿入
図に示すように、リンクリストの開始点はaで、リングのエントリポイントはbです。aから始まる2つの高速ポインタと低速ポインタを、一度に1つずつ、2つのノードに、一度に1つずつ設定します。交点がcであると仮定すると、最終的には確実に交配します。計算によれば、図の赤い線であるcからbまでの距離があり、長さはaからbに等しいので、別のポインターをaを指すように設定し、前に設定した低速ポインターをcから開始し、2人が一歩歩き、最後に会うポイントはリングの入り口であるbです。


    public ListNode EntryNodeOfLoop(ListNode pHead) {
    
    
        if (pHead == null||pHead.next == null) {
    
    
            return null;
        }
        ListNode fast = pHead;
        ListNode slow = pHead;
        while (fast != null &&fast.next!=null) {
    
    
            fast = fast.next.next;
            slow = slow.next;
            if (slow == fast) {
    
    
                ListNode slow2 = pHead;
                while (slow != slow2) {
    
    
                    slow = slow.next;
                    slow2 = slow2.next;
                }
                return slow;
            }
        }
        return null;

    }

おすすめ

転載: blog.csdn.net/AIJXB/article/details/113682077