OJ Leetcode [] [] [] [リスト]をダブルポインタリスト交差160

タイトル

交差開始ノード2つのリストを見つけるためのプログラムを書きます。

 

以下の二つのリスト:

 

 

交差点ノードC1で始まります。

 

例1:

 

 

 

入力:intersectVal = 8、リスタ= [4,1,8,4,5]、ListBの= [5,0,1,8,4,5]、skipA = 2、SKIPB = 3

输出:値を持つノードのリファレンス= 8

入力解釈:交差点ノードが8である(2つの交差リストは0にはできません場合は、注意してください)。それぞれのヘッダ開始日から、リストAは、Bは鎖[5,0,1,8,4,5]であり、[4,1,8,4,5]です。Aにおいて、第一の交差点ノードは、2つのノードを有し、Bにおいて、交差点ノードの前に3つのノードがあります。

 

 

例2:

  

 

入力:intersectVal = 2、リスタ= [0,9,1,2,4]、ListBの= [3,2,4]、skipA = 3、SKIPB = 1

输出:値を持つノードのリファレンス= 2

入力解釈:交差点ノードが2である(それは二つのリストを交差することができない場合は0である、ということに注意してください)。それぞれのヘッダ開始日から、リストAは[0,9,1,2,4]は、リストBは[3,2,4]です。Aにおいて、第一の交差点ノードは、3つのノードを有し、Bにおいて、交差点ノードは、ノードの前にあります。

 

例3:

 

  入力:intersectVal = 0、リスタ= [2,6,4]、ListBの= [1,5]、skipA = 3、SKIPB = 2

出力:ヌル

入力解釈:各ヘッダの開始日から、リストAは[2,6,4]であり、Bは鎖[1,5]です。これら二つのリストが交差しないので、それはintersectVal 0でなければならない、とskipA SKIPBは任意の値であってもよいです。

説明:この二つのリストが交差するので、nullを返しません。

 

注意:

二つのリストのない交差点がない場合は、nullを返します。

結果に戻した後、二つのリストはまだ元の構造を維持しなければなりません。

全体のリストには周期構造が存在しないと仮定することができます。

プログラムO(n)の時間計算量、及びだけO(1)メモリを満たすようにしてください。

 

出典:滞在ボタン(LeetCode)

リンクします。https://leetcode-cn.com/problems/intersection-of-two-linked-lists

源泉徴収ネットワークからのすべての著作権。商業転載は許可公式、非商用の転載は、ソースを明記してくださいお問い合わせください。

 

私の考え

C ++を使用している場合、イェジンハオが行います。セットすべてのノードのリストのメモリアドレス。

そして、行の2番目のリストをトラバース。

 

しかし、今、いくつかのケースでは、我々は何をするCを使用する必要があります。当社は、これらのデータ構造を使用することができていません。事実は、データ構造の優位性を証明し、C ++ STLは本当に使いやすいです!

しかし、説明の次の選択を見てする方法があります。

問題への注目の溶液(とても良いです!

百聞は一見にしかずで、あなたが理解する図

Oの空間の複雑さはO(1)O(1)時間複雑度(N)O(N)

本明細書において使用される図示された実施形態は、説明比較巧妙な一の実装。

主題の意味
二つのリストが交差する場合、その交点後の長さが同じです

私たちが行う必要があるトラバースの端から同じ距離で同じ場所から二つのリストを作ることです。最初のノードの位置は、短いリストの位置のみです。
この目的のために、我々は二つのリストの長さの違いを解消しなければなりません

ポインタのpA点AリンクリストポインタPB点B鎖は、順次次のトラバーサル
のpAなら端には、その後のpA = headBが横断続ける
たpB場合終わりに、PB、= headAを横断し続ける
短いリストの先頭に、比較的長鎖のポインタを、長さの差が解消される
だけの場所を見つけるために二回最短リストを横断するので、
ビットのまわりであってもよいリスニングを、ほとんどのプラグイン直感的に、図に最も適したトピックのリスト

 

 

コードはまた、非常に簡単である(ここでは参照符号はコメントセクションのマスタです)

公共ListNode getIntersectionNode(ListNode headA、ListNode headB){ 
  IF(headA == NULL || headB == NULL)戻りヌル。
  ListNodeのpA = headA、PB、= headB。
  (PA!= PB){しばらく
    のpA = pAで== nullの?headB:pA.next。
    pB =をpB == nullの?headA:pB.next。
  } 
  のPA返します。
}

  

著者:user7208t

リンクします。https://leetcode-cn.com/problems/intersection-of-two-linked-lists/solution/tu-jie-xiang-jiao-lian-biao-by-user7208t/
出典:滞在ボタン(LeetCode)
著作権著者によって予約。商業転載は非商用の転載は、ソースを明記してください、権限の作者に連絡してください。

おすすめ

転載: www.cnblogs.com/shengwang/p/11781266.html