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

सी ++ में किसी लिंक की गई सूची के एम नोड्स के बाद एन नोड्स हटाएं?

आइए पहले अपनी लिंक की गई सूची को परिभाषित करें जिसमें डेटा और अगले नोड के लिए पॉइंटर शामिल है।

स्ट्रक्चर नोड {इंट डेटा; स्ट्रक्चर नोड* अगला;};

फिर हम अपना createList(Node ** headPtr, int new_data) फंक्शन बनाते हैं जो नोड के लिए एक डबलपॉइंटर और एक इंट वैल्यू लेता है। फ़ंक्शन के अंदर हम नए बनाए गए नोड को अगला पॉइंटर हेडप्टर और फिर हेडप्टर को नए बनाए गए नोड को असाइन करते हैं।

void createList(Node **headPtr, int new_data){ Node* newNode =new Node(); नया नोड-> डेटा =नया_डेटा; नया नोड-> अगला =(* हेडपीटीआर); (*headPtr) =newNode;}

DeleteNnodesAfterM (नोड * हेड, इंट एम, इंट एन) विधि रूट नोड और एम और एन मान लेती है। अंदर हम सिर को Node* करंट असाइन करते हैं और Node *t.

. भी घोषित करते हैं
void deleteNnodesAfterM(नोड *हेड, इंट एम, इंट एन) {नोड * करंट =हेड, * टी; इंट नोडकाउंट;

फ़ंक्शन के अंदर हमारे पास थोड़ी देर का लूप होता है जो चलता है जबकि करंट शून्य की ओर इशारा नहीं करता है। लूप के लिए पहला एम पुनरावृत्तियों के लिए चलता है। लूप के लिए पहली बार वर्तमान . को क्रियान्वित करने के बाद सूचक लिंक की गई सूची में M के बाद नोड को इंगित करता है। इसके बाद नोड *t को करंट-> अगला मान दिया जाता है, जो डिलीट किया जाने वाला पहला मान होता है।

जबकि (वर्तमान){ के लिए (नोडकाउंट =1; नोडकाउंट <एम एंड&करंट! =NULL; नोडकाउंट ++) करंट =करंट-> अगला; अगर (वर्तमान ==NULL) वापसी; टी =वर्तमान-> अगला;

लूप के लिए दूसरा एन पुनरावृत्तियों के लिए चलता है और शुरुआती स्थिति से एन नोड्स की संख्या को मुक्त करता है। करंट-> अगला तब t को सौंपा जाता है और t हमारा वर्तमान नोड बन जाता है।

के लिए टी =टी-> अगला; मुक्त(अस्थायी);}वर्तमान->अगला =टी;वर्तमान =टी;

अंत में, प्रिंटलिस्ट (नोड * हेड) जो हेड पॉइंटर लेता है, लिंक की गई सूची को प्रिंट करता है।

 शून्य प्रिंटलिस्ट (नोड * हेड) {नोड * अस्थायी =सिर; जबकि (अस्थायी!=NULL){ cout<data<<" "; अस्थायी =अस्थायी-> अगला; } cout< 

उदाहरण

आइए लिंक की गई सूची के एम नोड्स के बाद एन नोड्स को हटाने के लिए निम्नलिखित कार्यान्वयन को देखें -

#include नेमस्पेस का उपयोग करके std;struct Node{ int data; नोड * अगला;}; शून्य createList (नोड ** headPtr, int new_data) {नोड * नया नोड =नया नोड (); नया नोड-> डेटा =नया_डेटा; नया नोड-> अगला =(* हेडपीटीआर); (* headPtr) =newNode;} शून्य प्रिंटलिस्ट (नोड * हेड) {नोड * अस्थायी =सिर; जबकि (अस्थायी!=NULL){ cout<data<<" "; अस्थायी =अस्थायी-> अगला; } cout< अगला; अगर (वर्तमान ==NULL) वापसी; टी =वर्तमान-> अगला; के लिए (नोडकाउंट =1; नोडकाउंट <=एन &&टी! =न्यूल; नोडकाउंट ++) {नोड * अस्थायी =टी; टी =टी-> अगला; मुक्त (अस्थायी); } वर्तमान-> अगला =टी; वर्तमान =टी; }}int main(){ नोड* हेड =NULL; इंट एम =2, एन =2; क्रिएटलिस्ट (और हेड, 2); क्रिएटलिस्ट (और हेड, 4); क्रिएटलिस्ट (और हेड, 6); क्रिएटलिस्ट (और हेड, 8); क्रिएटलिस्ट (और हेड, 10); क्रिएटलिस्ट (और हेड, 12); क्रिएटलिस्ट (और हेड, 14); cout <<"एम =" <<एम <<"एन =" <<एन <<एंडल; cout<<"मूल लिंक की गई सूची:"< 

आउटपुट

उपरोक्त कोड निम्न आउटपुट उत्पन्न करेगा -

M =2 N =2मूल लिंक की गई सूची :14 12 10 8 6 4 2हटाने के बाद लिंक की गई सूची :14 12 6 4

  1. C++ में सर्कुलर लिंक्ड लिस्ट के नोड्स का योग

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

  1. C++ में सर्कुलर लिंक्ड लिस्ट में नोड्स गिनें

    हमें नोड्स के साथ एक सर्कुलर लिंक्ड लिस्ट दी गई है और कार्य एक सर्कुलर लिंक्ड लिस्ट में मौजूद नोड्स की गिनती की गणना करना है। सर्कुलर लिंक्ड लिस्ट लिंक्ड लिस्ट का एक रूपांतर है जिसमें पहला तत्व अंतिम तत्व को इंगित करता है और अंतिम तत्व पहले तत्व को इंगित करता है। सिंगल लिंक्ड लिस्ट और डबल लिंक्ड लि

  1. पायथन में लिंक की गई सूची से m नोड्स के बाद n नोड्स को हटाने का कार्यक्रम

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