ホームページ  >  記事  >  バックエンド開発  >  C 言語の反復メソッドを使用して、リンク リストの最後の k ノードを逆順に出力します。

C 言語の反復メソッドを使用して、リンク リストの最後の k ノードを逆順に出力します。

WBOY
WBOY転載
2023-09-17 21:21:02892ブラウズ

C 言語の反復メソッドを使用して、リンク リストの最後の k ノードを逆順に出力します。

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

反復メソッドは通常、条件値が 1 または true になるまでループを使用して実行します。

たとえば、リストにノード 29、34、43、56、88 が含まれており、k の値が 2 である場合、出力は k までの予備ノード (たとえば 56 と 88) になります。

C 言語の反復メソッドを使用して、リンク リストの最後の k ノードを逆順に出力します。

Linked List: 29->34->43->56->88
Input: 2
Output: 56 88

リストから最後の k 個の要素を削除する必要があるため、最良の方法は、要素が次のようなスタック データ構造を使用することです。これを押し込むとリストが作成され、スタックの開始要素はリストの最後の要素となり、その後 k 回目までスタックからポップされ、リンクされたリストの最後のノードが得られます。

以下のコードは、指定されたアルゴリズムの C 実装を示しています。

アルゴリズム

START
   Step 1 -> create node variable of type structure
      Declare int data
      Declare pointer of type node using *next
   Step 2 -> create struct node* intoList(int data)
      Create newnode using malloc
      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
      Declare int array[count], temp2 = count,i
      Set temp1 = head
      Loop While(temp1 != NULL)
         Set array[--temp2] = temp1->data
         Set temp1 = temp1->next
      End
      Loop For i = 0 and i < k and i++
         Print array[i]
      End
   Step 4 -> In Main()
      Create list using struct node* head = intoList(9)
      Set k=3 and count=0
      Call rev(head,count,k)
STOP

#include<stdio.h>
#include<stdlib.h>
// Structure of a node
struct node {
   int data;
   struct node *next;
};
//functon for inserting a new node
struct node* intoList(int data) {
   struct node* newnode = (struct node*)malloc(sizeof(struct node));
   newnode->data = data;
   newnode->next = NULL;
   return newnode;
}
// Function to reversely printing the elements of a node
void 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 = head;
   while(temp1 != NULL) {
      array[--temp2] = temp1->data;
      temp1 = temp1->next;
   }
   for(i = 0; i < k; i++)
   printf("%d ",array[i]);
}
int main() {
   printf("</p><p>reverse of a list is : ");
   struct node* head = intoList(9); //inserting elements into a list
   head->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); //calling function to print reversely
   return 0;
}

出力

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

えええええ

以上がC 言語の反復メソッドを使用して、リンク リストの最後の k ノードを逆順に出力します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。