単独リンクリストを逆にします。
例:
入力:1-> 2-> 3-> 4- > 5-> NULLの 出力:5-> 4-> 3-> 2- > 1-> NULL
反復法、次のように:
/ * * *単独リンクリストのための定義。 *構造体ListNode { * INTヴァル。 次の*構造体ListNode *; *}。 * / 構造体 ListNode * reverseList(構造体 ListNode * ヘッド){ 場合(ヘッド== NULL ||頭部>次== NULL) 戻りヘッド。 構造体 ListNode *事前= ヘッド。 構造体 ListNode * CUR =頭部> 次。 構造体 ListNode * TMP =頭部>ネクスト> 次; 一方、(CUR) { TMP = cur-> 次。 駄犬- >次= プレ。 前 = CUR。 CUR = TMP; } ヘッド - >次= NULL; 戻る前; }
次のように再帰的な方法は次のとおりです。
構造体 ListNode * reverseList(構造体 ListNode * ヘッド){ 場合(ヘッド== NULL ||頭部> ==次NULL) 戻りヘッド。 他 { 構造体 ListNode * newhead = reverseList(頭部> 次); ヘッド - >ネクスト>次= ヘッド。 ヘッド - >次= NULL; 返すnewhead; } }
要約下で、再帰的な書き込みは、全体として、再帰最内層が決定され、一つ、二つの部分再帰的に分割することができ、この問題のために、再帰は、ヘッドが空である場合、最も内側の層である、又は頭部>次の空です。その後、最外層から出発して、第2の部分を書き込み、それが想定され、残りの部分は、再帰関数は、リストが反転された戻り通過し、その後残りを行うされます。再帰関数は、頭部、尾ことに留意すべきである、そして中央部分が再帰によって完成させることができます。