C++のソートされたリンクリストで中央値を見つける
この問題では、N個の要素で構成されるソートされたリンクリストが与えられます。私たちのタスクは、並べ替えられたリンクリストの中央値を見つけることです。 。
ソートされたリンクリスト は、すべての要素が特定の順序でソートされている単純なリンクリストです。 例 − 4-> 6-> 7-> 9-> NULL
中央値 リンクリストの中央の要素です。 Nが奇数であるかのように見つけることができます:中央値は(n / 2) th 要素
Nが偶数の場合-s中央値は(n / 2) th の平均です 要素と(n / 2 + 1) th 要素。
問題を理解するために例を見てみましょう
Input: 2 -> 3 -> 4 -> 6 -> 9 -> NULL Output: 4
ソリューションアプローチ
この問題の簡単な解決策は、リンクリストのすべての要素をトラバースしてカウントすることです。
ここで、カウントが奇数の場合、リンクリストのN/2番目の要素までリンクリストを再度トラバースします。
カウントが偶数の場合、N/2番目の要素とN/2 + 1番目の要素までトラバースし、それらを加算して2で除算します。
代替アプローチ
この問題を解決する別のアプローチは、2つのポインタートラバーサルを使用してリンクリストをトラバースし、リンクリストの要素の数を見つけることです。
これは、要素の数を数えずに中央値を見つけるためのアルゴリズムです。それらは、条件に基づいて、pointer1とpointer2の2つのポインターです。
ポインター1がNULLでない場合、ポインター2は中央値です。
ポインター1がNULLの場合、(ポインター2のノードの前+ポインター2->データ)/2。
例
ソリューションの動作を説明するプログラム
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
struct Node* next;
};
void findMedianValue(Node* head){
Node* ptr1 = head;
Node* ptr2 = head;
Node* prev = head;
if (head != NULL) {
while (ptr2 != NULL && ptr2->next != NULL) {
ptr2 = ptr2->next->next;
prev = ptr1;
ptr1 = ptr1->next;
}
if (ptr2 != NULL)
cout<<ptr1->data;
else
cout<<float(ptr1->data + prev->data) / 2;
}
}
void pushVal(struct Node** head_ref, int new_data){
Node* new_node = new Node;
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
int main(){
struct Node* head = NULL;
pushVal(&head, 3);
pushVal(&head, 5);
pushVal(&head, 6);
pushVal(&head, 8);
pushVal(&head, 9);
pushVal(&head, 11);
cout<<"The median of the linked list is ";
findMedianValue(head);
return 0;
} 出力
The median of the linked list is 7
-
C++でソートおよびローテーションされたリンクリストのローテーションをカウントします
リンクリストが表示されます。リストは最初にソートされ、次にK個のノードでローテーションされます。目標は、Kの値を見つけることです。K個のノードだけ回転する入力としてリンクリストを以下に示す場合- それならオリジナルは-だったに違いない ここでKは2であることがわかります。入力リンクリストは、元のソートされたリンクリストの2ノードのローテーションです。 例を挙げて理解しましょう。 入力 −リスト:5→7→9→1→3 出力 リンクリストの要素は次のとおりです。5791 3 ソートおよびローテーションされたリンクリストのローテーション数は-3 説明 −元のソート済み
-
C++のリンクリストの代替ノードの合計
この問題では、リンクリストが表示されます。私たちのタスクは、リンクリストの代替ノードの合計を出力することです。 リンクリストは、リンクを介して相互に接続された一連のデータ構造です。 では、問題に戻りましょう。ここでは、リンクリストの代替ノードを追加します。これは、ノードが位置0、2、4、6、…であることを追加することを意味します 問題を理解するために例を見てみましょう。 入力 4 → 12 → 10 → 76 → 9 → 26 → 1 出力 24 説明 considering alternate strings