件名の説明:
二つの入力リスト、彼らの最初の共通のノードを見つけます。
考えました:
+ 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を