//キーボードで複数の整数を入力し、入力データと逆の順序でヘッドノードを持つ単一リンクリストを作成します(ヘッダーの挿入により単一リンクリストが作成されます) #include <stdio.h> #include <stdlib.h> typedef struct Link { int data; struct Link * next; } link; // InitLink(link * head_node){ head_node =(link *)malloc(sizeof(link)); //ヘッドノードを作成する head_node-> data = 0; //ヘッドノードデータフィールドの初期割り当て値は0 head_node-> next = NULL; link * ptail = head_node; //ヘッダー挿入割り当て printf( "リンクリストに逆の順序で保存するには、いくつかの値を入力してください:\ n"); int num = 0; while(num!= -1){// -1を入力して scanf を終了( "%d"、&num); link * new_node =(link *)malloc(sizeof(link)); //新しいノードを申請する new_node-> data = num; //新しい値を新しいノードに割り当てます new_node-> next = head_node; //新しいノードのポインタフィールドは最後のノードです head_node = new_node; //新しいノードは最後のノードになります(ヘッドノード、ヘッドノードは後ろにあります) ptail = new_node; //テールポインターはこの新しいノードを 指し、先に進みます } printf( "テールポインターが指す値は:%d \ n"、head_node-> next-> data); // ptailを返す; //最後のノードを指しますテールポインターは return head_node; } //リンクリストのトラバース(逆順で確立され、順次トラバーサル) void showLink(link * head_node){ link * tmp = head_node-> next; //ヘッドノードの次のノードは最初のノードですノードはトラバースを開始し、終了フラグ-1の出力を回避しますが 、(tmp!= NULL){ // if(tmp-> data == -1){ // break; //シーケンシャルトラバーサルの場合、終了フラグ-1は出力されません。コントロール、そうでなければ何も出力されません // printf( "%d"、tmp-> data); tmp = tmp-> next; } } void main(){ link * myHeadNode = NULL; myHeadNode = initLink(myHeadNode); //初期化されたヘッドノード printfを取得します( "リンクリストは逆順で確立されています:\ n"); showLink(myHeadNode); }
0はヘッドノードの値であり、印刷することはできません。トラバース時にtmp-> data == 0にトラバースし、トラバースを終了するだけです。