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

C++での再帰的な挿入とトラバーサルのリンクリスト


リンクリストを形成するために使用される整数値が与えられます。タスクは、最初に挿入し、次に再帰的アプローチを使用して単一リンクリストをトラバースすることです。

最後にノードを再帰的に追加

  • ヘッドがNULLの場合→ヘッドにノードを追加

  • それ以外の場合は、headに追加します(head→next)

ノードの再帰的走査

  • ヘッドがNULLの場合→終了

  • それ以外の場合はprint(head→next)

入力 − 1 --2 -7 -9 -10

出力 −リンクリスト:1→2→7→9→10→NULL

入力 − 12-21-17-94-18

出力 −リンクリスト:12→21→17→94→18→NULL

以下のプログラムで使用されているアプローチは次のとおりです

このアプローチでは、関数を使用してノードを追加し、単一リンクリストをトラバースして、次の入力のためにそれらを再帰的に呼び出します。

  • 整数と次のポインタSLLNode*を含む構造SLLNodeを次に取ります。

  • 関数addtoEnd(SLLNode * head、int data)は、リストのヘッドへのポインターとデータ部分の整数を取り、リンクリストの最後にノードを追加します。

  • ヘッドポインタがNULLの場合、リストは空です。新しいノードを追加して、ヘッドとして設定します。ヘッド→ネクストをNULLとして追加します。このノードへのポインタを返します

  • headがnullでない場合は、head-> next =addtoEnd(head-> next、data)を使用してノードをhead→nextに追加します。

  • 関数traverseList(SLLNode * head)は、headからトラバースを開始し、各値を出力します。

  • ヘッドがNULLの場合は、NULLを出力して戻ります。

  • それ以外の場合は、データ値を出力し、traverseList(head-> next)を使用して次にトラバースします。

  • addtoEnd()を使用してメインのリストを作成し、traverseList()を使用してリストを出力します。

#include <bits/stdc++.h>
using namespace std;
struct SLLNode {
   int data;
   SLLNode* next;
};
SLLNode* addtoEnd(SLLNode* head, int data){
   if (head == NULL){
      SLLNode *nodex = new SLLNode;
      nodex->data = data;
      nodex->next = NULL;
      return nodex;
   }
   else{
      head->next = addtoEnd(head->next, data);
    }
   return head;
}
void traverseList(SLLNode* head){
   if (head == NULL){
      cout <<"NULL";
      return;
   }
   cout << head->data << " -> ";
   traverseList(head->next);
}
int main(){
   SLLNode* head1 = NULL;
   head1 = addtoEnd(head1, 1);
   head1 = addtoEnd(head1, 8);
   head1 = addtoEnd(head1, 56);
   head1 = addtoEnd(head1, 12);
   head1 = addtoEnd(head1, 34);
   cout<<"Linked List is :"<<endl;
   traverseList(head1);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます

Linked List is :
1 -> 8 -> 56 -> 12 -> 34 -> NULL

  1. C++でソートおよびローテーションされたリンクリストのローテーションをカウントします

    リンクリストが表示されます。リストは最初にソートされ、次にK個のノードでローテーションされます。目標は、Kの値を見つけることです。K個のノードだけ回転する入力としてリンクリストを以下に示す場合- それならオリジナルは-だったに違いない ここでKは2であることがわかります。入力リンクリストは、元のソートされたリンクリストの2ノードのローテーションです。 例を挙げて理解しましょう。 入力 −リスト:5→7→9→1→3 出力 リンクリストの要素は次のとおりです。5791 3 ソートおよびローテーションされたリンクリストのローテーション数は-3 説明 −元のソート済み

  2. C++のリンクリストの代替ノードの合計

    この問題では、リンクリストが表示されます。私たちのタスクは、リンクリストの代替ノードの合計を出力することです。 リンクリストは、リンクを介して相互に接続された一連のデータ構造です。 では、問題に戻りましょう。ここでは、リンクリストの代替ノードを追加します。これは、ノードが位置0、2、4、6、…であることを追加することを意味します 問題を理解するために例を見てみましょう。 入力 4 → 12 → 10 → 76 → 9 → 26 → 1 出力 24 説明 considering alternate strings