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

लिंक की गई सूची को C++ में k स्थानों से घुमाने का कार्यक्रम

मान लीजिए हमारे पास एक लिंक्ड सूची है। हमें सूची को k स्थानों से दाईं ओर घुमाना है। k का मान धनात्मक होगा। इसलिए यदि सूची [1 −> 2 −> 3 −> 4 −> 5 −> न्यूल], और k =2 जैसी है, तो आउटपुट [4 −> 5 −> 1 −> 2 −> 3 −> होगा नल]

आइए चरणों को देखें -

  • यदि सूची खाली है, तो शून्य वापस लौटें

  • लेन :=1

  • पूंछ नामक एक नोड बनाएं:=सिर

  • जबकि टेल का अगला भाग रिक्त नहीं है

    • लेन को 1 से बढ़ाएं

    • पूंछ :=पूंछ के आगे

  • पूंछ के आगे :=सिर

  • के:=के मॉड लेन

  • न्यूहेड:=शून्य

  • i के लिए :=0 से len - k

    • पूंछ :=पूंछ के आगे

  • न्यूहेड :=टेल के आगे

  • पूंछ के आगे :=शून्य

  • नया सिर लौटाएं

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class ListNode{
   public:
   int val;
   ListNode *next;
   ListNode(int data){
      val = data;
      next = NULL;
   }
};
ListNode *make_list(vector<int> v){
   ListNode *head = new ListNode(v[0]);
   for(int i = 1; i<v.size(); i++){
      ListNode *ptr = head;
      while(ptr->next != NULL){
         ptr = ptr->next;
      }
      ptr->next = new ListNode(v[i]);
   }
   return head;
}
void print_list(ListNode *head){
   ListNode *ptr = head;
   cout << "[";
   while(ptr->next){
      cout << ptr->val << ", ";
      ptr = ptr->next;
   }
   cout << "]" << endl;
}
class Solution {
   public:
   ListNode* rotateRight(ListNode* head, int k) {
      if(!head) return head;
      int len = 1;
      ListNode* tail = head;
      while(tail->next){
         len++;
         tail = tail->next;
      }
      tail->next = head;
      k %= len;
      ListNode* newHead = NULL;
      for(int i = 0; i < len - k; i++){
         tail = tail->next;
      }
      newHead = tail->next;
      tail->next = NULL;
      return newHead;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,4,5,6,7,8,9};
   ListNode *head = make_list(v);
   print_list(ob.rotateRight(head, 4));
}

इनपुट

[1,2,3,4,5,6,7,8,9], 4

आउटपुट

[6, 7, 8, 9, 1, 2, 3, 4, ]

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

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

  1. सी ++ में लिंक्ड लिस्ट का उपयोग करके दो बहुपदों को जोड़ना।

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

  1. C++ में लिंक्ड सूची जोड़ी के अनुसार नोड्स स्वैप करने का कार्यक्रम

    मान लीजिए हमारे पास एक लिंक्ड सूची है। हमें हर दो आसन्न नोड्स (जोड़ी) को स्वैप करना होगा और उसके सिर को वापस करना होगा। यहां बाधा यह है कि, हम नोड्स के मान को संशोधित नहीं कर सकते हैं, केवल नोड को ही बदला जा सकता है। तो अगर सूची [1,2,3,4] जैसी है, तो परिणामी सूची [2,1,4,3] होगी। इसे हल करने के लिए,