C ++のリンクリストで小数(またはn / k – th)ノードを検索します
単一リンクリストと数kがあるとします。 (n / k)番目の要素を見つける関数を作成する必要があります。ここで、nはリスト内の要素の数です。小数の場合は、上限値を選択します。したがって、リストが1、2、3、4、5、6、およびk =2の場合、出力は3になります。n=6およびk=2の場合、n/k番目のノードを6/として出力します。 2番目のノード=3番目のノード。
これを解決するには、以下のようないくつかの手順に従う必要があります-
- tempとfracPointという2つのポインタを取得し、それぞれnullとstartで初期化します。
- kごとに、一時ポインタをジャンプし、fracPointポインタを1回ジャンプします。
例
#include<iostream> using namespace std; class Node { public: int data; Node* next; }; Node* getNode(int data) { Node* new_node = new Node; new_node->data = data; new_node->next = NULL; return new_node; } Node* fractionalNodes(Node* start, int k) { if (k <= 0 || start == NULL) return NULL; Node* fracPoint = NULL; int i = 0; for (Node* temp = start; temp != NULL; temp = temp->next) { if (i % k == 0) { if (fracPoint == NULL) fracPoint = start; else fracPoint = fracPoint->next; } i++; } return fracPoint; } void printList(Node* node) { while (node != NULL) { cout << node->data << " "; node = node->next; } cout << endl; } int main(void) { Node* start = getNode(1); start->next = getNode(2); start->next->next = getNode(3); start->next->next->next = getNode(4); start->next->next->next->next = getNode(5); int k = 2; cout << "List is: "; printList(start); Node* answer = fractionalNodes(start, k); cout << "\nFractional node is " << answer->data; }
出力
List is: 1 2 3 4 5 Fractional node is 3
-
C++でマルチレベルリンクリストをフラット化する
この問題では、マルチレベルのリンクリストが提供されます。私たちの仕事は、マルチレベルのリンクリストをフラット化するプログラムを作成することです。 平坦化操作は、リンクリストで最初に第1レベルのノードが発生し、次に第2レベルのノードが発生するように実行されます。 マルチレベルリンクリスト は多次元データ構造であり、リンクリストのすべてのノードに2つのリンクポインタがあります。1つは次のノードへのリンクで、もう1つは1つ以上のノードを持つ子リストへのリンクです。この子ポインタは、他のリストノードを指している場合とそうでない場合があります。 例 問題を理解するために例を見てみましょう
-
C++のバイナリツリーで最も深いノードを見つける
この問題では、二分木が与えられます。私たちのタスクは、バイナリツリーで最も深いノードを見つけることです。 。 バイナリツリーは、データストレージの目的で使用される特別なデータ構造です。二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。 二分木で最も深いノード ツリー内で可能な最大の高さにあるノードです。 問題を理解するために例を見てみましょう 入力: 出力:8 ソリューションアプローチ 高さを見つけて、高さの最後のノードまでツリーをトラバースして返す必要があるため、この問題を解決するには複数の方法があります。すべての解決策は、この原則のみに基