इस Slashdot साक्षात्कार में लिनुस टॉर्वाल्ड्स के रूप में उद्धृत किया गया है:
मैंने बहुत से लोगों को देखा है जो "प्रचलित" प्रविष्टि पर नज़र रखते हुए एक एकल-लिंक्ड सूची प्रविष्टि को हटाते हैं, और फिर प्रविष्टि को हटाने के लिए कुछ ऐसा करते हैं
if (
प्रचलित ) prev-> अगला = प्रविष्टि-> अगला;
अन्य
सूची_हेड = प्रविष्टि-> अगला;और जब भी मुझे उस तरह का कोड दिखाई देता है, मैं बस "यह व्यक्ति संकेत नहीं समझता"। और यह काफी दुख की बात है।
जो लोग पॉइंटर्स को समझते हैं, वे "एंट्री पॉइंटर को पॉइंटर" का उपयोग करते हैं, और लिस्ट_हेड के पते के साथ इसे इनिशियलाइज़ करते हैं। और फिर जैसे ही वे सूची को आगे बढ़ाते हैं, वे केवल "* पीपी = प्रविष्टि-> अगला" करके, किसी भी शर्त का उपयोग किए बिना प्रविष्टि को हटा सकते हैं।
एक PHP डेवलपर के रूप में मैंने एक दशक पहले विश्वविद्यालय में सी के परिचय के बाद से संकेत नहीं छुआ है । हालांकि, मुझे लगता है कि यह एक प्रकार की स्थिति है जिससे मुझे कम से कम परिचित होना चाहिए। लिनस किस बारे में बात कर रहा है? ईमानदार होने के लिए, अगर मुझे एक लिंक की गई सूची को लागू करने और एक आइटम को हटाने के लिए कहा गया, तो उपरोक्त 'गलत' तरीका है कि मैं इसके बारे में जाऊंगा। जैसा कि लिनुस सबसे अच्छा कहता है, मुझे कोड करने के लिए क्या जानना चाहिए?
मैं स्टैक ओवरफ्लो के बजाय यहां पूछ रहा हूं क्योंकि मैं वास्तव में उत्पादन कोड में इसके साथ कोई समस्या नहीं है।
prev
पूरे नोड को संग्रहीत करने के बजाय स्थान को संग्रहीत करने की आवश्यकता होती है , तो आप बस के स्थान को संग्रहीत कर सकते हैंprev.next
, क्योंकि केवल वही चीज है जिसमें आप रुचि रखते हैं। एक सूचक के लिए एक सूचक। और अगर आप ऐसा करते हैं, तो आप मूर्खतापूर्ण से बचतेif
हैं, क्योंकि अब आपके पासlist_head
एक नोड के बाहर से एक पॉइंटर होने का अजीब मामला नहीं है । सूची के प्रमुख के लिए सूचक तब शब्दार्थ है जो कि अगले नोड के सूचक के समान है।