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

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

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

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • यदि सिर मौजूद नहीं है, तो सिर वापस करें
  • पहला:=सिर, दूसरा:=सिर के आगे, डमी एक नया नोड है जिसका मान -1 है
  • डमी के आगे :=पहला, और पिछला :=डमी
  • जबकि दूसरा शून्य नहीं है
    • अस्थायी:=सेकंड के आगे
    • पहले के आगे :=दूसरे के बाद
    • दूसरे के अगले:=पहले
    • पिछला के आगे :=सेकंड
    • पिछला :=पहले
    • यदि अस्थायी शून्य नहीं है, तो पहला:=अस्थायी और दूसरा:=अगला तापमान, अन्यथा विराम
  • डमी के आगे वापसी

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

उदाहरण

#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* swapPairs(ListNode* head) {
      if(!head)return head;
         ListNode* first= head;
         ListNode* second = head->next;
         ListNode* dummy = new ListNode(-1);
         dummy->next = first;
         ListNode* prev = dummy;
         while(second){
            ListNode* temp = second->next;
            first->next = second->next;
            second->next = first;
            prev->next = second;
            prev = first;
            if(temp){
               first = temp;
               second = temp ->next;
            }
            else break;
      }
      return dummy->next;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   ListNode *head = make_list(v);
   print_list(ob.swapPairs(head));
}

इनपुट

{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

आउटपुट

[2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13,]

  1. C++ में सर्कुलर लिंक्ड लिस्ट में नोड्स गिनें

    हमें नोड्स के साथ एक सर्कुलर लिंक्ड लिस्ट दी गई है और कार्य एक सर्कुलर लिंक्ड लिस्ट में मौजूद नोड्स की गिनती की गणना करना है। सर्कुलर लिंक्ड लिस्ट लिंक्ड लिस्ट का एक रूपांतर है जिसमें पहला तत्व अंतिम तत्व को इंगित करता है और अंतिम तत्व पहले तत्व को इंगित करता है। सिंगल लिंक्ड लिस्ट और डबल लिंक्ड लि

  1. पायथन में लिंक की गई सूची से m नोड्स के बाद n नोड्स को हटाने का कार्यक्रम

    मान लीजिए कि हमें एक लिंक्ड सूची दी गई है जिसमें हेड के रूप में प्रारंभ नोड है, और दो पूर्णांक संख्याएं एम और एन हैं। हमें सूची को पार करना होगा और कुछ नोड्स को हटाना होगा जैसे कि पहले m नोड्स को सूची में रखा जाता है और अगले n नोड्स को पहले m नोड्स को हटा दिए जाने के बाद। हम इसे तब तक करते हैं जब तक

  1. एक लिंक्ड सूची के सभी नोड्स को हटाने का कार्यक्रम जिसका मूल्य पायथन के समान है

    मान लीजिए कि हमारे पास एक एकल लिंक की गई सूची है, और एक लक्ष्य है, हमें उन सभी नोड्स को हटाने के बाद उसी लिंक को वापस करना होगा, जिनका मूल्य लक्ष्य के समान है। इसलिए, यदि इनपुट [5,8,2,6,5,2,9,6,2,4] जैसा है, तो आउटपुट [5, 8, 6, 5, 9, 6, 4,] होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -