与えられた1->2->3->4
、あなたは返す必要があります2->1->4->3
。
対象は非常にシンプルに見える、それは先行ノードに駆動ノードのポイントを聞かせすること、そして、ノード前駆体ノードは、後輪駆動後輪駆動ノードを指すが、また、洪水のノードは、その少しトリッキー交換する必要があります後。
次のように図のアイデアが例示されている
1 - > 2 - > X - > Y。
| | |
左から右AFT
ステップ:初期preNode =は、右、左、右後部4つのノードポインティング
ステップ:予備=左=左、右= pre.next right.next;
1 < - > X-2 - > Y
| | |
pre.nextは、右後方を左
= NULL X-場合、pre.next = NULL、
!もしX =ヌル、Y =ヌル、 pre.next = X;
そうでなければY - > X(Y.next = X )、pre.next = Y、予め= X。
コード
ListNode swapPairsパブリック(ListNodeヘッド){ //ならない境界条件/だけつのノード、直接リターン IF(ヘッド== NULL || head.next == NULL) 戻りヘッド; ListNodeヘッドは、右= head.nextを=を残し、 = right.next AFT; ListNode preHead新しい新しいListNode =(-1); preHead.next =右; ListNode新しい新しい事前ListNode =(-1); //先行ノード 一方{(右= NULL!) right.next =左。 右= pre.next; プリ=左; IF(AFT == NULL){ pre.next = NULL; ; BREAK } = AFT左、 右= aft.next。 IF(右== NULL) { pre.next =左。 }他{ right.next =船尾。 } } 戻りpreHead.next。 }
アイデアがあります