ビジネスニーズ:逆転リストを指すリスト先頭ポインタを考えます。実装プロセス:隣接ノード間の鎖ドメインを変更します。
例:
入力:
1-> 2-> 3-> 4-> NULLの
出力:
4-> 3-> 2-> 1-> NULL
入力:
1-> 2-> 3-> 4-> 5-> NULLの
出力:
5-> 4-> 3-> 2-> 1-> NULL
入力:NULL
出力:NULL
入力:1 - > NULL
出力:1 - > NULL
反復法:
空間複雑:O(1)時間計算:O(N)
図1に示すように、初期化3つのポインタ
事前に= NULL、CURR = *ヘッド、次= NULL
2、次のループを実行し、リストを反復処理
//現在の次回変更する前に、
//ストアの次のノード
の次= curr->次の//ここで次電流の変化
、実際の逆転が起こる場所です//
curr->次=前のページ//前方PREVとCURR一歩を移動する
前= CURR
CURR =次
以下は、アルゴリズムの実装プロセスであります:
// 反復Cリンクされたリストを逆にプログラム する#include <stdio.hに> する#include <STDLIB.H> / * リンクリストノード* / 構造体ノード { int型データ、 構造体のノード* 次の; }。/ * 関数はリンクリスト逆にする* / ボイド逆を(構造体ノード** head_ref) { 構造体ノード* PREV = NULL; 構造体のノード*現在= * head_ref。 構造体のノード*次回= NULL; しばらく(現在!= { // NULL) ストアの次の 次の=の電流> 次。 // 現在のノードのポインタの逆 の電流>次= 前のページ; // 移動ポインタ先1位。 PREV = 現在; 現在 = 次回。 } * head_ref = PREV。 } / * ノードプッシュする機能* / ボイドプッシュ(構造体ノード** head_ref、INT NEW_DATA) { 構造体ノード* new_node =(構造体ノード*)はmalloc(はsizeof(構造体ノード))。 new_node - >データ= NEW_DATA。 new_node - >次=(* head_ref)。 ( * head_ref)= new_node。 } / * リンクされたリストを印刷する機能* / ボイドがprintlist(構造体ノード* ヘッド) { 構造体ノード*のTEMP = ヘッド。 一方、(!TEMP = NULL) { のprintf(" %d個"、temp-> データ)。 TEMP = temp-> 次。 } のprintf(" の\ n " ); } / *機能上にテストするドライバプログラム* / int型のmain(){ / * 空のリストから開始* / 構造体ノード*ヘッド= NULL; (プッシュ・ヘッド、20 )。 プッシュ(&ヘッド、4 )。 (プッシュ・ヘッド、15 )。 (プッシュ・ヘッド、85 )。 printf(" 与えられたリンクリスト\ nを" ); がprintlist(ヘッド) (リバース・ヘッド) printf(" 逆リンクリスト\ N "); がprintlist(ヘッド) リターン 0 ; }