エントリーリストノードリストが提供55中央勝

タイトル説明

リンクされたリストに、前記リングが含む場合、エントリのリングノードリストを見つけるには、そうでない場合は、ヌル出力します。
 

問題解決のためのアイデア


シンク付きのリングを見つけるための最初のステップ。それぞれP1、リストの先頭、P1各歩行ステップのP2点、P2はそれぞれ、リング内の位相P1 == P2の検索シンクまでの2つのステップを取ります。

第二段階は、入口リングを検索します。N、ステップ、P1 == P2、P2が2Xを介してノードの数である場合、P1は、Xそこを通ってノードの数であるが、環中のNノードが提供される接続、P2はP1複数の2Xで歩くより= N + X = X; P1ケース指向入口リング; p1は工程数が実際にリストの先頭、同じ位置P1、P1、P2、P1 == P2工程まで各パスをできるように、P2点をリングを歩いたことがわかります。

 

コードは以下の通りです

公共ListNode EntryNodeOfLoop(ListNode PHEAD)
    { 
        
        ListNode listNode1 = PHEAD。
        ListNode listNode2 = PHEAD。
        試す{
             int型フラグ= 0 一方、(pHead.next!= NULL ){
                 場合(listNode1 == PHEAD){ 
                    フラグ ++ もし(フラグ> = 2 ){
                         戻り ヌル
                    } 
                } 
                listNode1 =listNode1.next; 
                listNode2 = listNode2.next.next。
                もし(listNode1 == listNode2){ 
                    listNode2 = PHEAD。
                    一方、(!listNode1 = listNode2)
                    { 
                        listNode1 = listNode1.next。
                        listNode2 = listNode2.next。
                    } 
                    場合(listNode1 == listNode2){
                         戻りlistNode1と、
                    } 
                    
                    
                    
                    
                    戻りlistNode1と、    
                }
                
                
            } 
        } キャッチ(NullPointerExceptionが電子){
             戻り ヌル
        } 
        戻り ヌル
        
    } 
    パブリック クラスListNode {
         int型のval; 
         ListNode次 = nullを
 
         ListNode(int型のval){
              この .val = ヴァル。
         } 
        
     }

 

おすすめ

転載: www.cnblogs.com/Transkai/p/11407664.html