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

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


タスクは、再帰関数を使用して、指定されたリンクリストの逆を印刷することです。プログラムは逆に印刷する必要がありますが、リストを逆にしないでください。つまり、ノードの順序は同じままです。

ここで、プログラムは、リストの最後のノードに格納されているNULLが調べられ、ヘッドノードのデータが出力されるまで、最初のノードのアドレスを含むヘッドポインタを次のノードに移動します。

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

Input: 29 34 43 56
Output: 56 43 34 29

まず、ノードがリストに挿入され、挿入されたノードを指すポインターが開始されます。最終リストが作成された後、一時ポインタが最初のノードポインタで初期化され、最後のノードが何も指さないため、ノードの次のアドレスがNULLになるまで増分し続け、最後のノードからリストがヘッドポインタまでトラバースされるとします。実際にリストを反転せずに、リストの反転を表示します。

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

アルゴリズム

START
   Step 1 -> create node variable of type structure
      Declare int data
      Declare pointer of type node using *next
   Step 2 ->Declare function void reverse(node* head)
      IF head == NULL
         return
      Call reverse(head->next)
      Print head->data
   Step 3 -> Declare Function void push(node** header, char newdata)
      Allocate memory using malloc
      Set newnode->data = newdata
      Set newnode->next = (*header)
      Set (*header) = newnode
   Step 4 ->In Main()
      Create list using node* head = NULL
      Insert elements through push(&head, 56)
      Call reverse(head)
STOP

#include<stdio.h>
#include<stdlib.h>
//creating structure for a node
struct node {
   int data;
   node* next;
};
//function to print reverse of the data in the list
void reverse(node* head) {
   if (head == NULL)
      return;
   reverse(head->next);
   printf("%d ", head->data);
}
//function to puch the node in the list
void push(node** header, char newdata) {
   struct node* newnode = (struct node*)malloc(sizeof(struct node));
   newnode->data = newdata;
   newnode->next = (*header);
   (*header) = newnode;
}
int main() {
   node* head = NULL;
   push(&head, 56); //calling function to push 56 in the list
   push(&head, 43);
   push(&head, 34);
   push(&head, 29);
   reverse(head);
   return 0;
}

出力

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

reverse of a linked list 56 43 34 29

  1. リンクリストの代替ノードをC言語で印刷する(反復法)

    この問題では、プログラムは、反復法を使用して、指定されたリンクリストから代替を印刷する必要があります。 反復法は、条件が値1またはtrueになるまで実行されるループを一般的に使用する方法です。 たとえば、リストにはノード29、34、43、56、88が含まれ、出力には29、43、88などの代替ノードが含まれます。 例 Input: 29->34->43->56->88 Output: 29 43 88 アプローチは、最後のノードまでリスト全体をトラバースすることです。一方、1にインクリメントされるカウンター変数をトラバースすることができ、ユーザーの選択に応じて

  2. Cプログラムで余分なスペースや変更を加えずに、リンクリストの裏面を印刷します。

    タスクは、余分なスペースを使用せずにリンクリストの最後からノードを印刷することです。つまり、余分な変数はなく、最初のノードを指すヘッドポインターが移動します。 例 Input: 10 21 33 42 89 Output: 89 42 33 21 10 再帰的アプローチ(余分なスペースを使用)、リンクリストの反転(指定されたリンクリストの変更が必要)、スタック上の要素のプッシュ、要素のポップと表示など、リンクリストを逆の順序で印刷するソリューションは多数あります。 1つずつ(スペースO(n)が必要)、これらのソリューションはO(1)よりも多くのスペースを使用しているようです。 O(