C++でのリンクリストジャンプ
正の数を含む単一リンクリストノードがあるとします。すべてのノードの次のノードが前方のノードvalノードを指す同じリンクリストを見つける必要があります。そのようなノードが見つからない場合、nextはnullになります。
したがって、入力が[2,3,10,5,9]の場合、出力は[2、3、15、]
になります。これを解決するには、次の手順に従います-
-
配列を定義するv
-
ノードがnullでない場合は、-
を実行します-
ノードの値をvに挿入
-
ノード:=ノードの次
-
-
ret=値0の新しいリストノード
-
temp =ret
-
i:=0
-
i
-
next of temp:=値v [i]
の新しいリストノード -
temp:=次のtemp
-
i:=i + v [i]
-
-
retの次を返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class ListNode { public: int val; ListNode *next; ListNode(int data) { val = data; next = NULL; } }; ListNode *make_list(vector<int> v) { ListNode *head = new ListNode(v[0]); for (int i = 1; i < v.size(); i++) { ListNode *ptr = head; while (ptr->next != NULL) { ptr = ptr->next; } ptr->next = new ListNode(v[i]); } return head; } void print_list(ListNode *head) { ListNode *ptr = head; cout << "["; while (ptr) { cout << ptr->val << ", "; ptr = ptr->next; } cout << "]" << endl; } class Solution { public: ListNode* solve(ListNode* node) { vector <int> v; while(node){ v.push_back(node->val); node = node->next; } ListNode* ret = new ListNode(0); ListNode* temp = ret; int i = 0; while(i < v.size()){ temp->next = new ListNode(v[i]); temp = temp->next; i += v[i]; } return ret->next; } }; main(){ Solution ob; vector<int> v = {2,2,3,5,9,15,3,4}; ListNode *head = make_list(v); print_list(ob.solve(head)); }
入力
{2,2,3,5,9,15,3,4}
出力
[2, 3, 15, ]
-
C++でマルチレベルリンクリストをフラット化する
この問題では、マルチレベルのリンクリストが提供されます。私たちの仕事は、マルチレベルのリンクリストをフラット化するプログラムを作成することです。 平坦化操作は、リンクリストで最初に第1レベルのノードが発生し、次に第2レベルのノードが発生するように実行されます。 マルチレベルリンクリスト は多次元データ構造であり、リンクリストのすべてのノードに2つのリンクポインタがあります。1つは次のノードへのリンクで、もう1つは1つ以上のノードを持つ子リストへのリンクです。この子ポインタは、他のリストノードを指している場合とそうでない場合があります。 例 問題を理解するために例を見てみましょう
-
C++のリンクリストを使用して2つの多項式を追加します。
この概念をよりよく理解するために、最初に必要なすべての基本的な内容をブラッシュアップしましょう。 リンクリスト リストのノードにオブジェクトとして各要素を格納するデータ構造です。すべてのメモには、2つの部分のデータハンと次のノードへのリンクが含まれています。 多項式 は変数と係数で構成される数式です。たとえば、x ^ 2-4x + 7 多項式リンクリスト 、多項式の係数と指数は、リストのデータノードとして定義されます。 リンクリストとして保存されている2つの多項式を追加します。同じ累乗の変数の係数を追加する必要があります。リンクリストノードには3つのメンバーが含まれ、係数値は次のノー