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

C++ का उपयोग करके किसी दिए गए आकार के समूहों में एक डबल-लिंक्ड सूची को उलट दें

इस समस्या में, हमें एक लिंक की गई सूची के शीर्ष पर एक सूचक और एक पूर्णांक k दिया जाता है। k आकार के समूहों में, हमें लिंक की गई सूची को उलटने की आवश्यकता है। उदाहरण के लिए -

Input : 1 <-> 2 <-> 3 <-> 4 <-> 5 (doubly linked list), k = 3
Output : 3 <-> 2 <-> 1 <-> 5 <-> 4

समाधान खोजने के लिए दृष्टिकोण

इस समस्या में, हम इस समस्या को हल करने के लिए एक पुनरावर्ती एल्गोरिथ्म बनाने जा रहे हैं। इस दृष्टिकोण में, हम रिकर्सन का उपयोग करने जा रहे हैं और इसका उपयोग करके समस्या का समाधान करेंगे।

उदाहरण

#include <iostream>
using namespace std;
struct Node {
   int data;
   Node *next, *prev;
};
// push function to push a node into the list
Node* push(Node* head, int data) {
   Node* new_node = new Node();
   new_node->data = data;
   new_node->next = NULL;
   Node* TMP = head;
   if (head == NULL) {
      new_node->prev = NULL;
      head = new_node;
      return head;
   }
   while (TMP->next != NULL) { // going to the last node
      TMP = TMP->next;
   }
   TMP->next = new_node;
   new_node->prev = TMP;
   return head; // return pointer to head
}
// function to print given list
void printDLL(Node* head) {
   while (head != NULL) {
   cout << head->data << " ";
   head = head->next;
}
cout << endl;
}
Node* revK(Node* head, int k) {
   if (!head)
      return NULL;
   head->prev = NULL;
   Node *TMP, *CURRENT = head, *newHead;
   int count = 0;
   while (CURRENT != NULL && count < k) { // while our count is less than k we simply reverse                                                 the nodes.
      newHead = CURRENT;
      TMP = CURRENT->prev;
      CURRENT->prev = CURRENT->next;
      CURRENT->next = TMP;
      CURRENT = CURRENT->prev;
      count++;
   }
   if (count >= k) {
      head->next = revK(CURRENT, k); // now when if the count is greater or equal
      //to k we connect first head to next head
   }
   return newHead;
}
int main() {
   Node* head;
   for (int i = 1; i <= 5; i++) {
      head = push(head, i);
   }
   cout << "Original List : ";
   printDLL(head);
   cout << "\nModified List : ";
   int k = 3;
   head = revK(head, k);
   printDLL(head);
}

आउटपुट

Original List : 1 2 3 4 5
Modified List : 3 2 1 5 4

उपरोक्त कोड की व्याख्या

इस दृष्टिकोण में, हम सूची के माध्यम से आगे बढ़ रहे हैं और तब तक चल रहे हैं जब तक कि हमारी गिनती k से कम न हो जाए। हम करते हैं और रिकर्सिव कॉल हेड को वह मान देते हैं -> अगला (यहां हम सूची को उलट रहे हैं जैसे हम जाते हैं, लेकिन जब हमारे के तक पहुंच जाता है, तो हमें अपने सिर को अन्य सूचियों के लिए इंगित करने की आवश्यकता होती है उदाहरण के लिए, यदि हमारा सूची 1 2 3 4 5 है और हमारा k 3 है इसमें हम मध्य तत्वों को 3 2 1 पर उलट देते हैं लेकिन अब हमें 1 से 4 को इंगित करने की आवश्यकता है क्योंकि वह तत्व भी उलट होने वाला है, इसलिए हम इसका उपयोग कर रहे हैं रिकर्सिव कॉल और एक अतिरिक्त if स्टेटमेंट बनाना।)।

निष्कर्ष

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


  1. सी ++ एसटीएल में रिवर्स फ़ंक्शन सूचीबद्ध करें

    इस लेख में हम C++ में काम करने, वाक्य रचना और सूची ::रिवर्स () फ़ंक्शन के उदाहरणों पर चर्चा करेंगे। STL में सूची क्या है सूची एक डेटा संरचना है जो अनुक्रम में कहीं भी निरंतर समय सम्मिलन और विलोपन की अनुमति देती है। सूचियों को डबल लिंक्ड सूचियों के रूप में लागू किया जाता है। सूचियाँ गैर-सन्निहित स्म

  1. सी ++ में रिकर्सन का उपयोग करके लिंक की गई सूची के वैकल्पिक नोड्स प्रिंट करें

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

  1. पायथन प्रोग्राम दिए गए आकार के समूहों में एक सरणी को उलटने के लिए?

    =1 तो हम सरणी के सभी तत्वों को उलट देते हैं। एल्गोरिदम Revarray(A,n,p) /* A is an integer Array, n is the size of an array and every sub-array of size p starting from the beginning of the array and reverse it.*/ Step 1: i is the loop control variable which is initialized by 0. Step 2: using while l