चुनौतियों पर वापस जाएँ
आसान 0 हल किए गए 0% स्वीकृति

लिंक्ड लिस्ट के ऑपरेशन

लिंक्ड लिस्ट का अनुकरण करें: दोनों सिरों पर जोड़ें, आगे से या मान से हटाएँ और उलटें।

आप क्या सीखेंगे

  • दोनों सिरों पर नोड जोड़ना और हटाना
  • दिए गए मान वाला पहला नोड हटाना
  • लिस्ट का क्रम उलटना

समस्या

लिंक्ड लिस्ट मानों को नोड में रखती है जो अगले नोड की ओर इशारा करते हैं, इसलिए आगे जोड़ना या हटाना सस्ता है। खाली से शुरू होने वाली लिस्ट का अनुकरण करें।

ऑपरेशन क्रम से प्रोसेस करें:

  • push_front x: x को आगे जोड़ें।
  • push_back x: x को पीछे जोड़ें।
  • pop_front: पहला मान हटाएँ (लिस्ट खाली हो तो अनदेखा करें)।
  • remove x: मान x वाला पहला नोड हटाएँ, अगर हो।
  • reverse: नोड का क्रम उलटें।

linked_list_operations(operations) लिखें।

इनपुट

operations: ऑपरेशन।

आउटपुट

लिस्ट के मान आगे से पीछे के क्रम में लौटाएँ।

सीमाएँ

0 ≤ ऑपरेशन की संख्या ≤ 10,000

−10^9 ≤ x ≤ 10^9

उदाहरण

उदाहरण 1
इनपुट:
operations = ["push_back 2", "push_front 1", "push_back 3", "reverse"]

अपेक्षित आउटपुट:
expected = [3, 2, 1]
इनपुट:
std::vector<std::string> operations = {"push_back 2", "push_front 1", "push_back 3", "reverse"};

अपेक्षित आउटपुट:
std::vector<long long> expected = {3, 2, 1};
इनपुट:
string[] operations = new string[] {"push_back 2", "push_front 1", "push_back 3", "reverse"};

अपेक्षित आउटपुट:
long[] expected = new long[] {3, 2, 1};

व्याख्या

लिस्ट 1 → 2 → 3 बनती है, और उलटने पर [3, 2, 1] मिलता है।

उदाहरण 2
इनपुट:
operations = ["push_back 5", "push_back 7", "push_back 5", "remove 5", "pop_front"]

अपेक्षित आउटपुट:
expected = [5]
इनपुट:
std::vector<std::string> operations = {"push_back 5", "push_back 7", "push_back 5", "remove 5", "pop_front"};

अपेक्षित आउटपुट:
std::vector<long long> expected = {5};
इनपुट:
string[] operations = new string[] {"push_back 5", "push_back 7", "push_back 5", "remove 5", "pop_front"};

अपेक्षित आउटपुट:
long[] expected = new long[] {5};

व्याख्या

remove सिर्फ़ पहला 5 हटाता है, 7 → 5 बचता है; फिर pop_front 7 हटाता है: [5]।

कैसे हल करें

पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।

संकेत 1

आगे-पीछे सस्ते में जोड़ने वाला लिस्ट टाइप (std::list, LinkedList<T>, deque) ज़्यादातर काम कर देता है।

संकेत 2

remove सिर्फ़ पहला मिलान हटाता है, और खाली लिस्ट पर pop_front कुछ नहीं करता।

संकेत 3

उलटने के बाद आगे के push और pop के लिए दूसरा सिरा शुरुआत बन जाता है।

अपेक्षित जटिलता

समय O(n²), अतिरिक्त स्थान O(n)

संदर्भ

यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।

दूसरों से सीखें

समुदाय समाधान

अभी तक कोई प्रकाशित समाधान नहीं। पहला साझा करने के लिए इस चुनौती को हल करें।