プログラミングの問題(Java実装)の安全性を証明するためにオファー - 共通ノードの最初の二つのリスト

件名の説明:

二つの入力リスト、彼らの最初の共通のノードを見つけます。

考えました:

 + cの長さを聞かせて、長さBは、Cは、尾部の一般的な長さであり、それは+ C + B = B + C +分かるB + Cです。

リストにアクセス尾のリストにアクセスするときは、ポインタ、リストBの先頭から再起動するために、そのアクセスので、リストB;同様に、ポインタが尾のリストにアクセスするには、リストBにアクセスするには、それをもう一度リストAの先頭から彼は、リストAにアクセスするために始めました これは、ポインタAを制御するだろうし、Bは、交差点へのアクセスを同時にリストにアクセスします。

実装:

/ * 
パブリッククラスListNode { 
    int型のval; 
    ListNode次= NULL; 

    ListNode(int型のval){ 
        this.val =ヴァル。
    } 
} * / 
パブリック クラスソリューション{
     公共ListNode FindFirstCommonNode(ListNode pHead1、ListNode pHead2){
         // 很厉害的解法 
        ListNode L1 = pHead1、L2 = pHead2。
        しばらく(L1!= L2){ 
            L1 =(L1 == nullの)?pHead2:l1.next。
            L2 =(L2 == nullの)?pHead1:l2.next。
        } 
        リターンL1; 
        
    } 
}

19ms:実行時間

メモリを取る:9528kを

2考えます:

暴力ダブルループ反復

実装:

/ * 
パブリッククラスListNode { 
    int型のval; 
    ListNode次= NULL; 

    ListNode(int型のval){ 
        this.val =ヴァル。
    } 
} * / 
パブリック クラスソリューション{
     公共ListNode FindFirstCommonNode(ListNode pHead1、ListNode pHead2){
         // 暴力解法 
        ListNode TMP1 = pHead1。
        ListNode TMP2 = pHead2。
        しばらく(TMP1!= nullの){
             しばらく(TMP2!= nullの){
                 場合(TMP1 == TMP2)
                     リターンTMP1。
                TMP2 = tmp2.next。
            } 
            TMP2 = pHead2。
            TMP1 = tmp1.next。
        } 
        戻り ヌル
    } 
}

21ms:実行時間

メモリを取る:9680kを

アイデアは、参考:https://www.nowcoder.com/discuss/198840

おすすめ

転載: www.cnblogs.com/MWCloud/p/11323173.html