रिवर्स ए लिंक्ड लिस्ट (C++)

Rivarsa E Linkda Lista C



इस LinuxHint ट्यूटोरियल में C++ में लिंक्ड लिस्ट को कैसे रिवर्स करें, यह दिखाया गया है। जब आप किसी लिंक की गई सूची को उल्टा करते हैं, तो लिंक पथ उल्टा हो जाता है, और हेड टेल बन जाता है और टेल हेड बन जाता है। नोड्स की स्थिति की अदला-बदली करके, हम इसे जल्दी समझ सकते हैं। इस अदला-बदली में, हम बस नोड्स की स्थिति को बाएं से दाएं या इसके विपरीत बदलते हैं।

लिंक्ड सूची: यह एक लिंक की गई सूची है जिसे हम उलटना चाहते हैं।







लिंक की गई सूची को उलटने के बाद: उपरोक्त लिंक की गई सूची को उलटने के बाद परिणाम नीचे होगा।





उपरोक्त उदाहरण आरेख में, हम देख सकते हैं कि जब हम लिंक की गई सूची को उलटते हैं तो हेड नोड और टेल नोड अपनी स्थिति बदलते हैं। हेड नोड, जो अब टेल नोड है, नल नोड की ओर इशारा करता है क्योंकि यह अब टेल नोड है।





एल्गोरिथम चरण

  1. हम एक मुख्य विधि बनाते हैं और कुछ आवश्यक चर घोषित करते हैं।
  2. फिर, हमारा अगला कदम एक ऐसी विधि बनाना है जो एक लिंक की गई सूची बना सके। यह विधि हमें एक लिंक की गई सूची बनाने में मदद करती है।
  3. अगला कदम लिंक की गई सूची को उलटने के लिए एक विधि बनाना है। इस पद्धति में, हम पूरी लिंक की गई सूची को पास करते हैं, और यह विधि लिंक की गई सूची को उल्टा कर देगी।
  4. अब, हमें अपने परिणाम को उलटने के बाद प्रदर्शित करने के लिए एक और विधि की आवश्यकता है।
  5. हम इन सभी उपरोक्त तरीकों को अपनी मुख्य विधि में जोड़ देंगे।

हम इसे समझने में आसान बनाने के लिए कुछ सचित्र रूप का उपयोग करके उलटी हुई लिंक्ड सूची की व्याख्या करने जा रहे हैं। तो चलिए उदाहरण से शुरू करते हैं।

नीचे एक लिंक की गई सूची है जिसे हम उलटना चाहते हैं।



स्टेप 1 . हरे रंग का नोड एक हेड नोड है, जो स्टार्टअप में पहले नोड को इंगित करता है।

चरण दो। अगले चरण में, हम पूरी लिंक की गई सूची को तब तक ट्रेस करेंगे जब तक कि हमें हेडर नोड के बगल में नल पॉइंटर नहीं मिल जाता। उसके लिए, हम अगले नोड को एक अस्थायी नाम देने जा रहे हैं, जैसा कि नीचे दिए गए आरेख में दिखाया गया है।

चरण 3। जैसा कि हमारे पास 'अस्थायी' नाम का एक नया संदर्भ नोड है, जो हमें पूरी लिंक्ड सूची को पार करने में मदद कर सकता है जब तक कि हमें नल पॉइंटर नहीं मिलता है, इसलिए हम हेडर नोड के अगले लिंक को शून्य के रूप में सेट कर सकते हैं, जो लिंक को प्रभावित नहीं करेगा सूची जैसा कि आरेख में दिखाया गया है। वर्तमान नोड के बगल में स्थित अशक्त सूचक को पिछला नोड कहा जाता है।

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

तो हम उन्हीं चरणों का पालन करते हैं और अंत में, हमें एक उलटी लिंक्ड सूची मिलेगी।

चरण 5 .

चरण 6।

चरण 7।

चरण 8।

चरण 9।

चरण 10।

चरण 11।

चरण 12।

चरण 13।

चरण 14। इस कदम पर, हमारी लिंक की गई सूची उलट गई।

लिंक की गई सूची को उलटने के लिए C++ प्रोग्राम

#शामिल
का उपयोग करते हुए नाम स्थान कक्षा ;

// नोड बनाने की विधि
struct नोड {
पूर्णांक मूल्य ;
नोड * अगला नोड पं ;
} * नोडऑब्जेक्ट ;

शून्य createLinkedList ( पूर्णांक एन ) ;
शून्य रिवर्सलिंक्डलिस्ट ( नोड ** नोडऑब्जेक्ट ) ;
शून्य दिखाना ( ) ;

पूर्णांक मुख्य ( ) {
पूर्णांक एन, मूल्य, मद ;
अदालत << 'आप कितने नोड बनाना चाहते हैं =>:' ;
खाना >> एन ;
createLinkedList ( एन ) ;
अदालत << ' \एन लिंक की गई सूची में जानकारी: \एन ' ;
दिखाना ( ) ;
अदालत << ' \एन उलटने के बाद लिंक्ड सूची \एन ' ;
रिवर्सलिंक्डलिस्ट ( और नोडऑब्जेक्ट ) ;
दिखाना ( ) ;
वापसी 0 ;
}
// यह विधि लिंक की गई सूची बनाएगी
शून्य createLinkedList ( पूर्णांक एन ) {
struct नोड * फ्रंटनोड, * tempNode ;
पूर्णांक मूल्य, अर्थात् ;

नोडऑब्जेक्ट = ( struct नोड * ) malloc ( का आकार ( struct नोड ) ) ;
यदि ( नोडऑब्जेक्ट == शून्य )
अदालत << 'स्मृति पुख्ता करने के लिए पर्याप्त नहीं' ;
वरना {
अदालत << 'कृपया नोड 1 (केवल संख्या) की जानकारी दर्ज करें:' ;
खाना >> मूल्य ;
नोडऑब्जेक्ट - > मूल्य = मूल्य ;
नोडऑब्जेक्ट - > अगला नोड पं = शून्य ;
tempNode = नोडऑब्जेक्ट ;

के लिये ( मैं = दो ; मैं <= एन ; मैं ++ ) {
फ्रंटनोड = ( struct नोड * ) malloc ( का आकार ( struct नोड ) ) ;

// जब लिंक की गई सूची में कोई नोड नहीं है
यदि ( फ्रंटनोड == शून्य ) {
अदालत << 'मेमोरी आवंटित नहीं की जा सकती' ;
टूटना ;
}
वरना {
अदालत << 'कृपया नोड की जानकारी दर्ज करें' << मैं << ':' ;
खाना >> मूल्य ;
फ्रंटनोड - > मूल्य = मूल्य ;
फ्रंटनोड - > अगला नोड पं = शून्य ;
tempNode - > अगला नोड पं = फ्रंटनोड ;
tempNode = tempNode - > अगला नोड पं ;
}
}
}
}

शून्य रिवर्सलिंक्डलिस्ट ( नोड ** नोडऑब्जेक्ट ) {
struct नोड * tempNode = शून्य ;
struct नोड * पिछलानोड = शून्य ;
struct नोड * वर्तमान नोड = ( * नोडऑब्जेक्ट ) ;
जबकि ( वर्तमान नोड ! = शून्य ) {
tempNode = वर्तमान नोड - > अगला नोड पं ;
वर्तमान नोड - > अगला नोड पं = पिछलानोड ;
पिछलानोड = वर्तमान नोड ;
वर्तमान नोड = tempNode ;
}
( * नोडऑब्जेक्ट ) = पिछलानोड ;
}
शून्य दिखाना ( ) {
struct नोड * tempNode ;
यदि ( नोडऑब्जेक्ट == शून्य ) {
अदालत << 'लिंक्डलिस्ट खाली है' ;
}
वरना {
tempNode = नोडऑब्जेक्ट ;
जबकि ( tempNode ! = शून्य )
{
अदालत << tempNode - > मूल्य << ' \टी ' ;
tempNode = tempNode - > अगला नोड पं ;
}
}
अदालत << endl ;
}

उत्पादन

आप कितने नोड बनाना चाहते हैं =>: 6
कृपया नोड 1 (केवल संख्या) की जानकारी दर्ज करें: 101
कृपया नोड 2: 95 की जानकारी दर्ज करें
कृपया नोड 3: 61 की जानकारी दर्ज करें
कृपया नोड 4: 19 की जानकारी दर्ज करें
कृपया नोड 5: 12 की जानकारी दर्ज करें
कृपया नोड 6: 11 की जानकारी दर्ज करें

लिंक की गई सूची में जानकारी:
101 95 61 19 12 11

उलटने के बाद लिंक्ड सूची
11 12 19 61 95 101

निष्कर्ष

इस LinuxHint आलेख ने समीक्षा की है कि C++ में किसी लिंक की गई सूची को कैसे उलटा जाए। लिंक की गई सूची को उलटने के कुछ अन्य तरीके हैं, लेकिन लिंक की गई सूची को उलटने के लिए यह एक बहुत ही सामान्य तरीका है। यह तय करना आप पर निर्भर है कि आप अपनी समस्याओं को कैसे हल करना चाहते हैं, लेकिन आमतौर पर रिवर्स लिंक्ड लिस्ट फ़ंक्शन पॉइंटर स्वैप के साथ एक साधारण लूप होना चाहिए।