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

C++ में क्रमबद्ध लिस्ट से डुप्लिकेट हटाना II (Remove Duplicates from Sorted List II)


मान लीजिए हमारे पास कुछ तत्वों की एक लिस्ट है। हमें उन सभी तत्वों को हटाना है जो एक से अधिक बार आए हैं। ताकि केवल विशिष्ट (distinct) तत्व लिस्ट में रहें। यदि लिस्ट [1,1,1,2,2,3,5,6,6,7,8] है, तो आउटपुट [3,5,7,8] होगा, अन्य सभी तत्व एक से अधिक बार मौजूद हैं।

आइए चरण देखें:

  • मान -1 वाला एक डमी नोड बनाएं, prev := NULL, dummyPtr := dummy
  • जब तक head null नहीं है:
    • यदि head का next मौजूद है या head का मान अगले नोड के मान के समान नहीं है, तो:
      • dummyPtr का next := head
      • temp := head का next, और head का next null करें
      • head := temp
      • dummyPtr := dummyPtr का next
    • अन्यथा:
      • prev := head, और head := head का next
      • जब तक head null नहीं है और head का मान = prev का मान:
        • prev := head और head := head का next
  • dummy का next वापस करें

उदाहरण

#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){
        cout << ptr->val << ", ";
        ptr = ptr->next;
    }
    cout << "]" << endl;
}

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode* dummy = new ListNode(-1);
        ListNode* prev = NULL;
        ListNode* dummyPtr = dummy;
        ListNode* nextNode;
        while(head){
            if(!head->next || head->val != head->next->val){
                dummyPtr->next = head;
                ListNode* temp = head->next;
                head->next = NULL;
                head = temp;
                dummyPtr = dummyPtr->next;
            } else {
                prev = head;
                head = head->next;
                while(head && head->val == prev->val){
                    prev = head;
                    head = head->next;
                }
            }
        }
        return dummy->next;
    }
};

int main(){
    Solution ob;
    vector<int> v = {1,1,1,2,2,3,5,6,6,7,8};
    ListNode *head = make_list(v);
    print_list(ob.deleteDuplicates(head));
}

इनपुट

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

आउटपुट

[3, 5, 7, 8, ]
  1. - Python में सूची से डुप्लिकेट कैसे हटाएं

    आप Python में डुप्लिकेट को dict.fromkeys() का उपयोग करके हटा सकते हैं, जो एक डिक्शनरी उत्पन्न करता है जो किसी भी डुप्लिकेट मान को हटा देता है। आप सूची को सेट में भी बदल सकते हैं। डिक्शनरी या सेट को वापस सूची में बदलना होगा ताकि आप डुप्लिकेट हटाए गए सूची को देख सकें। जब आप Python में सूची के साथ क

  1. Android में सॉर्टेड लिंक्ड लिस्ट से डुप्लिकेट कैसे हटाएं? Android में सॉर्टेड लिंक्ड लिस्ट से डुप्लिकेट कैसे हटाएं?

    Android में सॉर्टेड लिंक्ड लिस्ट से डुप्लिकेट हटाना यह उदाहरण दर्शाता है कि Android में सॉर्टेड लिंक्ड लिस्ट से डुप्लिकेट मान कैसे हटाए जाते हैं। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project पर जाएं और आवश्यक विवरण भरकर एक नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML में कोड जोड़ें re

  1. C++ में सॉर्टेड और रोटेटेड लिंक्ड लिस्ट में रोटेशन की गिनती C++ में सॉर्टेड और रोटेटेड लिंक्ड लिस्ट में रोटेशन की गिनती

    हमें एक लिंक्ड लिस्ट दी गई है। लिस्ट पहले सॉर्ट की गई है और फिर K नोड्स द्वारा रोटेट की गई है। लक्ष्य K का मान ज्ञात करना है। यदि हमें नीचे दी गई लिंक्ड लिस्ट इनपुट के रूप में दी गई है जो K नोड्स द्वारा रोटेटेड है: तो मूल लिस्ट रही होगी: और हम यहाँ देख सकते हैं K=2 है। इनपुट लिंक्ड लिस्ट मूल सॉर्