linked list - Traverse from end to front ( C++ LL Q:1 ) -



<पूर्व> int लिंक्डलिस्ट: doStuff () {नोड * चालू = अगला_; जबकि (वर्तमान! = नल) {वर्तमान = चालू-> अगला_; लंबाई _ ++; } // अंतिम पुनरावृत्ति में हम अंत / पूंछ / अंतिम नोड रिटर्न लंबाई तक पहुँच चुके हैं; }

आखिर से परे कोई नोड नहीं हैं मैं पूंछ-अंत के सामने-सिर में कैसे जा सकता हूं?

पुनरावर्तन काम कर सकता है, जैसा कि सहायक डेटा संरचना का निर्माण करना, जैसे मूल सूची के प्रत्येक तत्व के लिए एक प्रविष्टि के साथ एक सरणी। यदि आप ओ (एन) अतिरिक्त भंडारण की आवश्यकता के बिना एकल-थ्रेडेड सूची के लिए एक समाधान चाहते हैं, तो सबसे अच्छा शर्त यह है कि सूची को माइक्रैलिक के रूप में उल्टा उलट दें। मैंने इसके लिए एक उदाहरण लिखा, [लेकिन मैं होमवर्क के विषय में चिंता को छोड़ दूंगा] सूची को पीछे करने के बारे में एक चेतावनी: अगर कोई अन्य डेटा संरचनाएं जो मूल सूची में पॉइंटर्स को पकड़ती हैं, और आप अपने ट्रैवर्सल के दौरान उन तक पहुंच सकते हैं, तो वे काम नहीं कर पाएंगे, यदि उन्हें सूची में पहुंचने की आवश्यकता है, और यह उलट है, और यह यदि वे सूची को संशोधित करने की कोशिश करते हैं, तो वे डेटा भ्रष्टाचार का कारण बन सकते हैं।

अपडेट: ठीक है, यहाँ जगह में एक सूची को उल्टा करने के लिए (सी ++) रूटीन है यह परीक्षण नहीं किया गया है, यद्यपि। और मैं ध्यान दूंगा कि अगर यह होमवर्क है, तो पोस्टर को अभी भी यह पता लगाना होगा कि पूरा जवाब पाने के लिए इस नियमीकरण का सही इस्तेमाल कैसे किया जाए।

  नोड * रिवर्स लिस्ट (नोड * हेड) {/ / जगह में एक एकल पिरोया सूची उल्टा, नया सिर नोड वापसी * ​​prev = शून्य; नोड * cur = सिर; जबकि (नोड * अगला = अनु- & gt; अगला_) {कर- & gt; अगले_ = प्रचलित; Prev = चाल; Cur = अगला; } Cur- & gt; next_ = prev; वापसी कर; }  

Comments