トピックへのリンク:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
交差開始ノード2つのリストを見つけるためのプログラムを書きます。
以下の二つのリスト:
交差点ノードC1で始まります。
入力:intersectVal = 8、リスタ= [ 4,1,8,4,5]、ListBの= [5,0,1,8,4,5]、skipA = 2、SKIPB = 3
出力:ノードのリファレンスと= 8値
入力解釈:交差点ノードは、(2つの交差リストは0できない場合は、注意してください)8です。それぞれのヘッダ開始日から、リストAは、Bは鎖[5,0,1,8,4,5]であり、[4,1,8,4,5]です。Aにおいて、第一の交差点ノードは、2つのノードを有し、Bにおいて、交差点ノードの前に3つのノードがあります。
入力:intersectVal = 2、リスタ= [ 0,9,1,2,4]、ListBの= [3,2,4]、skipA = 3、SKIPB = 1
出力:値=持つノードのリファレンス 2
入力の解釈:交差点ノードは、(それは二つのリストを交差することができない場合は0である、ということに注意してください)2です。それぞれのヘッダ開始日から、リストAは[0,9,1,2,4]は、リストBは[3,2,4]です。Aにおいて、第一の交差点ノードは、3つのノードを有し、Bにおいて、交差点ノードは、ノードの前にあります。
入力:intersectVal = 0、リスタ= [ 2,6,4]、ListBの= [1,5]、skipA = 3は、SKIPB = 2
出力:NULL
入力の解釈:各ヘッダ開始日からは、リストAは[ 2,6,4]、Bは鎖[1,5]です。これら二つのリストが交差しないので、それはintersectVal 0でなければならない、とskipA SKIPBは任意の値であってもよいです。
説明:この二つのリストが交差するので、nullを返しません。
注意:
二つのリストのない交差点がない場合は、nullを返します。
結果に戻した後、二つのリストはまだ元の構造を維持しなければなりません。
全体のリストには周期構造が存在しないと仮定することができます。
プログラムO(n)の時間計算量、及びだけO(1)メモリを満たすようにしてください。
1 / * * 2 重リンクリストのための*の定義。 3 *構造体ListNode { 4 * int型のval; 5 次の*構造体ListNode *; 6 *}。 7 * / 8 構造体 ListNode * getIntersectionNode(構造体 ListNode * headA、構造体 ListNode * headB){ 9 構造体 ListNode * PA = headA、* PB = headB。 10 INT LEN1 = 0、LEN2 = 0、DIST = 0 。 11 一方(PA!= NULL){ 12 LEN1 ++ ; 13 PA = PA-> 次。 14 } 15 ながら(!PB = NULL){ 16 LEN2 ++ 。 17 PB = PB-> 次。 18 } 19 構造体 ListNode * LONGLIST、* ショートリスト。 20 であれば(LEN1> LEN2){ 21 LONGLIST = headA、ショートリスト= headB。 22 DIST = len1- LEN2。 23 } 他{ 24 LONGLIST = headB、ショートリスト= headA。 25 DIST = len2- LEN1。 26 } 27 ながら(dist--)LONGLIST = longList-> 次。 28 一方(LONGLIST!= NULL){ 29 であれば(LONGLIST ==ショッピングリスト)戻りLONGLIST。 30 LONGLIST = longList-> 次。 31 ショートリスト= shortList-> 次。 32 } 33 リターンNULL。 34 }