最初の24個の質問をleetcode:リンクリストにノードを切り替え二十から二

データ構造の問題の一種であるが、複数の交換を伴う解析を介して、アルゴリズムは、知識を必要とします。

まず第一に、私は、リスト内の相互交換ノードと思います。

クラスのソリューション:
     DEF swapPairs(自己、ヘッド:ListNode) - > ListNode:
         場合 ない ない head.next:リターン・ヘッド
         しばらくhead.next:
            一時 = head.next 
            ヘッド = temp.next 
            temp.next = ヘッドの
         リターン・ヘッド

明らかにこれはヘッドが変更されるため、リストに戻ることができない先頭ポインタを、見つけることができない、間違っています。この道路は動作しません。

この時点で、あなたは、再帰的なメソッドを使用することができます。再帰的な性質は、常に同じことを繰り返すことですので。

主なものは、私たちは三つのことを心配する必要があります。

1.戻り値
単位がやっ2.コール
3.終了条件を
この問題では:

1戻り値:交換サブリストの完了
2.ユニットを呼び出す:接続ヘッドの横、交換完了するために、二点スイッチは、ヘッドと次、交換後ろヘッドリンカー鎖が完成するために提供される必要があり
、ヘッドが空である:3.終了条件をまたは次のポインタは、現在のところつまたは複数のノードだけでヌルポインタで交換することができません

クラスのソリューション:
     DEF swapPairs(自己、ヘッド:ListNode) - > ListNode:
         場合 ない ない head.next:リターン・ヘッド
        RES = head.next 
        head.next = swapPairs(res.next)
        res.next = resが
         返さ解像度を

再帰的ステップの手順:(リストが想定される1-> 2-> 3-> 4-> 5-> 6)

最初の0:

ヘッド= 1

RES = 2 - > ...

res.next = 3 - > ...

  ラウンド1を入力:

  ヘッド= 3

  RES = 4 - > ..

  res.next = 5> 6

    ラウンド2を入力します。

    ヘッド= 5

    RES = 6

    res.next = nullを

      最初の3を入力します。ヌルが返された
    第二ラウンドに戻って:

    head.next = nullを

    res.next =ヘッド(5)

    戻りRES(6-> 5)

  戻る最初のラウンドへ:

  head.next = 6

  res.next =ヘッド(3)

  戻りRES(4-> 3-> 6> 5)

戻る最初の0:

head.next = 4

res.next = 1

戻りRES(2-> 1-> 4-> 3-> 6> 5)

 

おすすめ

転載: www.cnblogs.com/cchenyang/p/11422647.html