リンクリストがC++でペアワイズソートされているかどうかを確認します
n個の要素を持つリストLがあります。リストがペアごとにソートされているかどうかを確認する必要があります。リストが{8、10、18、20、5、15}のようなものだとします。これは、(8、10)、(18、20)、(5、15)がソートされるようにペアごとにソートされます。リストに奇数の要素がある場合、最後の要素は無視されます。
アプローチは単純すぎます。数字を左から右にトラバースします。 2つの連続する要素が取得され、それらがソートされているかどうかを確認します。いずれかのペアがソートされていない場合はfalseを返し、ペアが見つからない場合、つまりソートされていない場合はtrueを返します。
例
#include <iostream> #include <cmath> using namespace std; class Node{ public: int data; Node *next; }; void append(struct Node** start, int key) { Node* new_node = new Node; new_node->data = key; new_node->next = (*start); (*start) = new_node; } bool isPairwiseSorted(Node *start) { bool flag = true; struct Node* temp = start; while (temp != NULL && temp->next != NULL) { if (temp->data < temp->next->data) { flag = false; break; } temp = temp->next->next; } return flag; } int main() { Node *start = NULL; int arr[] = {8, 10, 18, 20, 5, 15}; int n = sizeof(arr)/sizeof(arr[0]); for(int i = 0; i<n; i++){ append(&start, arr[i]); } if(isPairwiseSorted(start)){ cout << "This is pairwise sorted"; } else { cout << "This is not pairwise sorted"; } }
出力
This is pairwise sorted
-
C++でマルチレベルリンクリストをフラット化する
この問題では、マルチレベルのリンクリストが提供されます。私たちの仕事は、マルチレベルのリンクリストをフラット化するプログラムを作成することです。 平坦化操作は、リンクリストで最初に第1レベルのノードが発生し、次に第2レベルのノードが発生するように実行されます。 マルチレベルリンクリスト は多次元データ構造であり、リンクリストのすべてのノードに2つのリンクポインタがあります。1つは次のノードへのリンクで、もう1つは1つ以上のノードを持つ子リストへのリンクです。この子ポインタは、他のリストノードを指している場合とそうでない場合があります。 例 問題を理解するために例を見てみましょう
-
C++でソートおよびローテーションされたリンクリストのローテーションをカウントします
リンクリストが表示されます。リストは最初にソートされ、次にK個のノードでローテーションされます。目標は、Kの値を見つけることです。K個のノードだけ回転する入力としてリンクリストを以下に示す場合- それならオリジナルは-だったに違いない ここでKは2であることがわかります。入力リンクリストは、元のソートされたリンクリストの2ノードのローテーションです。 例を挙げて理解しましょう。 入力 −リスト:5→7→9→1→3 出力 リンクリストの要素は次のとおりです。5791 3 ソートおよびローテーションされたリンクリストのローテーション数は-3 説明 −元のソート済み