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

C++ में लिंक्ड लिस्ट को पुनर्व्यवस्थित करना


मान लीजिए हमारे पास एक लिंक्ड लिस्ट है: L1 → L2 → L3 → L4 → ... → L(n-1) → Ln। हमें इसे L1 → Ln → L2 → L(n-1) → ... फॉर्म में पुनर्व्यवस्थित करना है। नोड्स के मान नहीं बदल सकते, केवल नोड्स के पॉइंटर्स बदल सकते हैं।

उदाहरण: [1,2,3,4,5] → [1,5,2,4,3]।

मध्य ढूंढें + रिवर्स + मर्ज

  1. स्लो-फास्ट पॉइंटर्स से लिस्ट का मध्य ढूंढें।
  2. दूसरे आधे भाग को रिवर्स करें।
  3. दोनों आधे भागों को बारी-बारी से मर्ज करें।

C++ कार्यान्वयन

#include <bits/stdc++.h>
using namespace std;

class ListNode {
public:
    int val;
    ListNode *next;
    ListNode(int data) { val = data; next = NULL; }
};

class Solution {
public:
    ListNode* reverse(ListNode* head) {
        ListNode* prev = NULL;
        while (head) {
            ListNode* next = head->next;
            head->next = prev;
            prev = head;
            head = next;
        }
        return prev;
    }
    
    void reorderList(ListNode* head) {
        if (!head) return;
        ListNode *slow = head, *fast = head;
        while (fast && fast->next) {
            slow = slow->next;
            fast = fast->next->next;
        }
        ListNode* second = reverse(slow->next);
        slow->next = NULL;
        ListNode* first = head;
        
        while (second) {
            ListNode* tmp1 = first->next;
            ListNode* tmp2 = second->next;
            first->next = second;
            second->next = tmp1;
            first = tmp1;
            second = tmp2;
        }
    }
};

int main() {
    // लिस्ट बनाने और टेस्ट करने का कोड
    return 0;
}

इनपुट

[1,2,3,4,5]

आउटपुट

[1, 5, 2, 4, 3, ]
  1. - C++ में अगला छोटा तत्व

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

  1. - C++ में अगला बड़ा तत्व

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

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

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