データ構造の問題の一種であるが、複数の交換を伴う解析を介して、アルゴリズムは、知識を必要とします。
まず第一に、私は、リスト内の相互交換ノードと思います。
クラスのソリューション: 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)