C++の2Dマトリックスからリンクリストを作成します
行列が1つあるとすると、再帰的アプローチを使用して2Dリンクリストに変換する必要があります。
リストには右ポインタと下ポインタがあります。
したがって、入力が次のような場合
10 | 20 | 30 |
40 | 50 | 60 |
70 | 80 | 90 |
これを解決するには、次の手順に従います-
-
関数make_2d_list()を定義します。これは、行列mat、i、j、m、n、
を取ります。 -
iとjが行列の境界にない場合、-
-
nullを返す
-
-
temp:=値mat [i、j]
で新しいノードを作成します -
温度の右:=make_2d_list(mat、i、j + 1、m、n)
-
温度の低下:=make_2d_list(mat、i + 1、j、m、n)
-
温度を返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class TreeNode { public: int data; TreeNode *right, *down; TreeNode(int d){ data = d; right = down = NULL; } }; void show_2d_list(TreeNode* head) { TreeNode *right_ptr, *down_ptr = head; while (down_ptr) { right_ptr = down_ptr; while (right_ptr) { cout << right_ptr->data << " "; right_ptr = right_ptr->right; } cout << endl; down_ptr = down_ptr->down; } } TreeNode* make_2d_list(int mat[][3], int i, int j, int m, int n) { if (i > n - 1 || j > m - 1) return NULL; TreeNode* temp = new TreeNode(mat[i][j]); temp->right = make_2d_list(mat, i, j + 1, m, n); temp->down = make_2d_list(mat, i + 1, j, m, n); return temp; } int main() { int m = 3, n = 3; int mat[][3] = { { 10, 20, 30 }, { 40, 50, 60 }, { 70, 80, 90 } }; TreeNode* head = make_2d_list(mat, 0, 0, m, n); show_2d_list(head); }
入力
{ { 10, 20, 30 }, { 40, 50, 60 }, { 70, 80, 90 } }
出力
10 20 30 40 50 60 70 80 90
-
C ++の2Dマトリックス(反復アプローチ)からリンクリストを作成します
行列が1つあるとすると、反復アプローチを使用して2Dリンクリストに変換する必要があります。リストには右ポインタと下ポインタがあります。 したがって、入力が次のような場合 10 20 30 40 50 60 70 80 90 出力はになります これを解決するには、次の手順に従います- real_head:=NULL サイズがmの配列head_arrを定義します。 初期化i:=0の場合、i
-
C++の循環リンクリストでノードをカウントします
ノードを含む循環リンクリストが与えられ、タスクは循環リンクリストに存在するノードの数を計算することです。 循環リンクリストは、最初の要素が最後の要素を指し、最後の要素が最初の要素を指すリンクリストのバリエーションです。単一リンクリストと二重リンクリストの両方を循環リンクリストにすることができます。 以下のプログラムでは、単一リンクリストを循環リンクリストとして実装し、その中のノード数を計算しています。 例 Input − nodes-: 20, 1, 2, 3, 4, 5 Output − count of nodes are-: 6 Input &minus