Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में डबल लिंक्ड लिस्ट में दिए गए योग के साथ जोड़े खोजें


इस समस्या में, हमें एक डबल लिंक्ड लिस्ट और एक वैल्यू योग दिया जाता है। हमारा काम डबल लिंक की गई सूची में दिए गए योग के साथ जोड़े ढूंढना है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

head − 2 <-> 5 <-> 6 <-> 9 <-> 12
x = 11

आउटपुट

(2, 9), (5, 6)

स्पष्टीकरण

For pairs (2, 9), the sum of values is 11
For pairs (5, 6), the sum of values is 11

समाधान दृष्टिकोण

समस्या का एक सरल समाधान पूरी लिंक्ड-लिस्ट को ट्रेस करना और तत्वों को एक-एक करके लेना और शेष लिंक्ड सूची में उस तत्व को ढूंढना है जिसका योग योग है। यह नेस्टेड लूप का उपयोग करके किया जाता है।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include<iostream>
using namespace std;
struct Node {
   int data;
   struct Node *next, *prev;
};
void findSumPairs(struct Node *head, int sum) {
   struct Node *first = head;
   int pairCount = 0;
   while (first != NULL) {
      struct Node *second = first -> next;
      while(second != NULL){
         if ((first->data + second->data) == sum) {
            pairCount++;
            cout<<"("<<first->data<<",
            "<<second->data<<")\n";
         }
         second = second -> next;
      }
      first = first -> next;
   }
   if (!pairCount)
      cout<<"No Such Pairs found !";
}
void insert(struct Node **head, int data) {
   struct Node *temp = new Node;
   temp->data = data;
   temp->next = temp->prev = NULL;
   if (!(*head))
      (*head) = temp;
   else{
      temp->next = *head;
      (*head)->prev = temp;
      (*head) = temp;
   }
}
int main() {
   struct Node *head = NULL;
   insert(&head, 12);
   insert(&head, 9);
   insert(&head, 6);
   insert(&head, 5);
   insert(&head, 2);
   int sum = 11;
   cout<<"Pair in the linked list with sum = "<<sum<<" :\n";
   findSumPairs(head, sum);
   return 0;
}

आउटपुट

Pair in the linked list with sum = 11 :
(2, 9)
(5, 6)

एक और दृष्टिकोण जो अधिक प्रभावी होता है वह इस तथ्य का उपयोग कर रहा है कि लिंक की गई सूची को क्रमबद्ध किया गया है। इसके लिए हम दो पॉइंटर्स का उपयोग करेंगे, एक शुरुआत में लिंक्ड लिस्ट के शीर्ष पर इंगित करता है। और दूसरा छोर शुरू में लिंक्ड सूची के अंतिम नोड की ओर इशारा करता है।

अब, हम योगफल खोजने के लिए फिर जोड़ देंगे और फिर इसकी तुलना

. से करेंगे
given sum.
If sumVal > sum, move end pointer leftwards.
If sumVal < sum, move start pointer rightwards.
If sumVal == sum, print both values, move start pointer rightwards.

जब पॉइंटर्स एक-दूसरे को पार करते हैं तो लूप से बाहर निकल जाते हैं। साथ ही, हम पाए गए जोड़ियों की संख्या की गणना करेंगे, यदि यह 0 के बराबर है, तो प्रिंट करें "ऐसा कोई जोड़ा नहीं मिला!"

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include<iostream>
using namespace std;
struct Node {
   int data;
   struct Node *next, *prev;
};
void findSumPairs(struct Node *head, int sum) {
   struct Node *start = head;
   struct Node *end = head;
   while (end->next != NULL)
      end = end->next;
   int pairCount = 0;
   while (start != NULL && end != NULL && start != end &&
   end->next != start) {
      if ((start->data + end->data) == sum) {
         pairCount++;
         cout<<"("<<start->data<<", "<<end->data<<")\n";
         start = start->next;
         end = end->prev;
      }
      else if ((start->data + end->data) < sum)
         start = start->next;
      else
         end = end->prev;
   }
   if (!pairCount)
      cout<<"No Such Pairs found !";
}
void insert(struct Node **head, int data) {
   struct Node *temp = new Node;
   temp->data = data;
   temp->next = temp->prev = NULL;
   if (!(*head))
      (*head) = temp;
   else{
      temp->next = *head;
      (*head)->prev = temp;
      (*head) = temp;
   }
}
int main() {
   struct Node *head = NULL;
   insert(&head, 12);
   insert(&head, 9);
   insert(&head, 6);
   insert(&head, 5);
   insert(&head, 2);
   int sum = 11;
   cout<<"Pair in the linked list with sum = "<<sum<<" :\n";
   findSumPairs(head, sum);
   return 0;
}

आउटपुट

Pair in the linked list with sum = 11 :
(2, 9)
(5, 6)

  1. एक क्रमबद्ध दोगुनी लिंक की गई सूची में ट्रिपल की गणना करें जिसका योग C++ में दिए गए मान x के बराबर है

    उदाहरण के लिए इनपुट linked list: [ 3−4−13−5−10−10−0 ] x=20 आउटपुट Count of triplets in a sorted doubly linked list whose product is equal to a given value x are: 2 स्पष्टीकरण Triplets will be: ( 3,4,13 ) and ( 10,10,0 ) इनपुट linked list: [ 4−3−1&minu

  1. C++ में संतुलित BST में दिए गए योग के साथ एक युग्म खोजें

    मान लीजिए कि हमारे पास एक संतुलित बाइनरी सर्च ट्री और एक लक्ष्य योग है, हमें एक ऐसी विधि को परिभाषित करना होगा जो यह जांचती है कि यह योग के साथ एक जोड़ी लक्ष्य योग के बराबर है या नहीं। इस मामले में। हमें यह ध्यान रखना होगा कि बाइनरी सर्च ट्री अपरिवर्तनीय है। तो, अगर इनपुट पसंद है तो आउटपुट होगा

  1. सी++ में डबल लिंक्ड लिस्ट का आकार खोजने का कार्यक्रम

    इस समस्या में हमें एक डबल लिंक्ड लिस्ट दी जाती है। हमारा काम C++ में डबली लिंक्ड लिस्ट का आकार खोजने के लिए एक प्रोग्राम बनाना है। डबल लिंक्ड लिस्ट एक विशेष प्रकार की लिंक्ड लिस्ट है जिसमें सिंगल लिंक्ड लिस्ट की तुलना में आगे और पीछे दोनों तरह से नेविगेशन संभव है। डबल लिंक्ड सूचियों की अवधारणा को