Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

リンクリストの最後のkノードを逆の順序で印刷しますC言語での反復アプローチ


リンクリストのk個のノードを逆の順序で出力する必要があります。この問題を解決するには、反復アプローチを適用する必要があります。

反復法は、条件が値1またはtrueになるまで実行されるループを一般的に使用する方法です。

たとえば、リストにノード29、34、43、56、88が含まれ、kの値が2である場合、出力は56や88などのkまでの代替ノードになります。

リンクリストの最後のkノードを逆の順序で印刷しますC言語での反復アプローチ

リンクリスト:29-> 34-> 43-> 56-> 88入力:2出力:56 88 

リストから最後のk個の要素を削除する必要があるため、最善の方法は、要素がプッシュされるスタックデータ構造を使用することです。これにより、リストが作成され、スタックの開始要素がリストの最後の要素になります。スタックからk回目までポップアウトして、リンクリストの最後のノードを取得します。

以下のコードは、与えられたアルゴリズムのc実装を示しています。

アルゴリズム

STARTステップ1->タイプ構造のノード変数を作成するintデータを宣言する*nextステップ2->createstruct node * intoList(int data)を使用してタイプノードのポインターを宣言するmallocを使用してnewnodeを作成するSet newnode-> data =data newnode -> next =NULL return newnode step 3-> Declare function void rev(struct node * head、int count、int k)create struct node * temp1 =head Loop While(temp1!=NULL)count ++ temp1 =temp1-> next end int array [count]、temp2 =count、iを宣言します。temp1=head Loop While(temp1!=NULL)を設定します。array[-temp2] =temp1->dataを設定します。 iMain()でstructnode*を使用してリストを作成しますhead=intoList(9)k=3およびcount=0に設定しますrev(head、count、k)STOP<を呼び出します/ pre> 

 #include  #include //nodestructノードの構造{intdata; struct node *next;};//新しいノードを挿入するための関数structnode* intoList(int data){struct node * newnode =(struct node *)malloc(sizeof(struct node)); newnode-> data =data; newnode-> next =NULL; return newnode;} //nodevoidの要素を逆に出力する関数rev(struct node * head、int count、int k){struct node * temp1 =head; while(temp1!=NULL){count ++; temp1 =temp1-> next; } int array [count]、temp2 =count、i; temp1=ヘッド; while(temp1!=NULL){array [-temp2] =temp1-> data; temp1 =temp1-> next; } for(i =0; i next=intoList(76); head-> next-> next =intoList(13); head-> next-> next-> next =intoList(24); head-> next-> next-> next-> next =intoList(55); head-> next-> next-> next-> next-> next =intoList(109); int k =3、count =0; rev(head、count、k); //関数を呼び出して逆に印刷すると0が返されます;}

出力

上記のプログラムを実行すると、次の出力が生成されます。

リストの逆は:109 55 24 

  1. 実際にC言語で反転せずに、リンクリストの反転を印刷します

    タスクは、再帰関数を使用して、指定されたリンクリストの逆を印刷することです。プログラムは逆に印刷する必要がありますが、リストを逆にしないでください。つまり、ノードの順序は同じままです。 ここで、プログラムは、リストの最後のノードに格納されているNULLが調べられ、ヘッドノードのデータが出力されるまで、最初のノードのアドレスを含むヘッドポインタを次のノードに移動します。 例 Input: 29 34 43 56 Output: 56 43 34 29 まず、ノードがリストに挿入され、挿入されたノードを指すポインターが開始されます。最終リストが作成された後、一時ポインタが最初のノードポイ

  2. C++の循環リンクリストのノードの合計

    この問題では、循環リンクリストが表示されます。私たちのタスクは、循環リンクリストのノードの合計を見つけるプログラムを作成することです。 リンクリストのすべてのノード値を追加するだけです。 いくつかの重要な定義 リンクリストは一連のデータ構造であり、リンクを介して相互に接続されています。 循環リンクリストは、最初の要素が最後の要素を指し、最後の要素が最初の要素を指すリンクリストのバリエーションです。単一リンクリストと二重リンクリストの両方を循環リンクリストにすることができます。 では、問題を理解するために例を見てみましょう。 入力 14 ->