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

सी++ में सूची घुमाएं

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

होगा।

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

  • यदि सूची खाली है, तो शून्य लौटें
  • लेन:=1
  • पूंछ नामक एक नोड बनाएं:=सिर
  • जबकि टेल का अगला भाग रिक्त नहीं है
    • लेन को 1 से बढ़ाएं
    • पूंछ:=पूंछ के आगे
  • पूंछ के आगे :=सिर
  • k :=k mod len
  • न्यूहेड:=शून्य
  • i के लिए:=0 से लेन - 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. सी ++ में अगला छोटा तत्व

    अगला छोटा तत्व वह तत्व है जो इसके बाद पहला छोटा तत्व है। आइए एक उदाहरण देखें। गिरफ्तारी =[1, 2, 3, 5, 4] 5 के लिए अगला छोटा तत्व 4 है और तत्वों 1, 2, 3 के लिए अगला छोटा तत्व -1 है क्योंकि उनके बाद कोई छोटा तत्व नहीं है। एल्गोरिदम यादृच्छिक संख्याओं के साथ सरणी प्रारंभ करें स्टैक को इनिशियलाइ

  1. C++ में अगला ग्रेटर एलिमेंट

    अगला बड़ा तत्व वह तत्व है जो इसके बाद पहला बड़ा तत्व है। आइए एक उदाहरण देखें। गिरफ्तारी =[4, 5, 3, 2, 1] 4 के लिए अगला बड़ा तत्व 5 है और तत्वों 3, 2, 1 के लिए अगला बड़ा तत्व -1 है क्योंकि उनके बाद कोई बड़ा तत्व नहीं है। एल्गोरिदम यादृच्छिक संख्याओं के साथ सरणी प्रारंभ करें। स्टैक को इनिशियला

  1. C++ में रैंडम पॉइंटर के साथ कॉपी लिस्ट

    एक लिंक्ड सूची एक रैखिक डेटा संरचना है जिसमें प्रत्येक नोड में दो ब्लॉक होते हैं जैसे कि एक ब्लॉक में नोड का मान या डेटा होता है और दूसरे ब्लॉक में अगले फ़ील्ड का पता होता है। आइए मान लें कि हमारे पास एक लिंक्ड सूची है जैसे कि प्रत्येक नोड में एक यादृच्छिक सूचक होता है जो सूची में अन्य नोड्स को इंग