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

दी गई लिंक्ड सूची को C++ प्रोग्राम में आकार अनुपात p:q की दो सूचियों में विभाजित करें

इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो दी गई लिंक्ड लिस्ट को p:q अनुपात में विभाजित करता है

सीधा सीधा कार्यक्रम है। आइए समस्या को हल करने के लिए चरणों को देखें।

  • लिंक्ड लिस्ट नोड के लिए एक स्ट्रक्चर बनाएं।

  • डमी डेटा के साथ लिंक की गई सूची को प्रारंभ करें।

  • p:q अनुपात प्रारंभ करें।

  • लिंक की गई सूची की लंबाई ज्ञात करें।

  • यदि लिंक की गई सूची की लंबाई p + q से कम है, तो लिंक को p:q अनुपात में विभाजित करना संभव नहीं है।

  • अन्यथा लिंक की गई सूची को p.

    . तक पुनरावृति करें
  • p पुनरावृत्तियों के बाद, लिंक को हटा दें और दूसरी लिंक की गई सूची के लिए एक नया शीर्ष बनाएं।

  • अब, लिंक की गई सूची के दो भागों को प्रिंट करें।

उदाहरण

आइए कोड देखें।

#include<bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   Node *next;
   Node(int data) {
      this->data = data;
      this->next = NULL;
   }
};
void printLinkedList(Node* head) {
   Node *temp = head;
   while (temp) {
      cout << temp->data << " -> ";
      temp = temp->next;
   }
   cout << "NULL" << endl;
}
void splitLinkedList(Node *head, int p, int q) {
   int n = 0;
   Node *temp = head;
   // finding the length of the linked list
   while (temp != NULL) {
      n += 1;
      temp = temp->next;
   }
   // checking wether we can divide the linked list or not
   if (p + q > n) {
      cout << "Can't divide Linked list" << endl;
   }
   else {
      temp = head;
      while (p > 1) {
         temp = temp->next;
         p -= 1;
      }
      // second head node after splitting
      Node *head_two = temp->next;
      temp->next = NULL;
      // printing linked lists
      printLinkedList(head);
      printLinkedList(head_two);
   }
}
int main() {
   Node* head = new Node(1);
   head->next = new Node(2);
   head->next->next = new Node(3);
   head->next->next->next = new Node(4);
   head->next->next->next->next = new Node(5);
   head->next->next->next->next->next = new Node(6);
   int p = 2, q = 4;
   splitLinkedList(head, p, q);
}

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।

1 -> 2 -> NULL
3 -> 4 -> 5 -> 6 -> NULL

निष्कर्ष

यदि ट्यूटोरियल में आपके कोई प्रश्न हैं, तो उनका टिप्पणी अनुभाग में उल्लेख करें।


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

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

  1. सी # एक लिंक्ड सूची में दिए गए नोड से पहले एक नोड जोड़ने के लिए कार्यक्रम

    LinkedList घोषित करें और उसमें नोड जोड़ें। string [] students = {"Tim","Jack","Henry","David","Tom"}; LinkedList<string> list = new LinkedList<string>(students); आइए एक नया नोड जोड़ें। var newNode = list.AddLast("Kevin"); अब,

  1. सी # एक लिंक्ड सूची में दिए गए नोड के बाद एक नोड जोड़ने के लिए कार्यक्रम

    एक LinkedList सेट करें और तत्व जोड़ें। स्ट्रिंग [] छात्र ={बेथ, जेनिफर, एमी, वेरा}; लिंक्डलिस्ट सूची =नई लिंक्डलिस्ट (छात्र); सबसे पहले, अंत में एक नया नोड जोड़ें। var newNode =list.AddLast(Emma); अब, दिए गए नोड के बाद एक नोड जोड़ने के लिए AddAfter() विधि का उपयोग करें। list.AddAfter(newNode, Matt