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

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

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

लिंक्ड सूची संरचना हमें इस प्रकार दी गई है -

Node
   value : <integer>
   next : <pointer to next node>

इसलिए, यदि इनपुट तत्वों की तरह है =[1, 2, 3, 4, 5, 6, 7, 8], m =3, n =1, तो आउटपुट [1, 2, 3, 5, 6] होगा। , 7, ]

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

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

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

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • पिछला :=सिर

  • वक्र:=सिर

  • क्यू:=0

  • पी:=0

  • जबकि कर्व शून्य नहीं है, करें

    • क्यू:=क्यू + 1

    • यदि q, m के समान है, तो

      • मेरे लिए 0 से n की सीमा में, करें

        • अगर curr.next रिक्त नहीं है, तो

          • curr :=अगला curr

      • पिछला का अगला :=अगले के बाद

      • क्यू:=0

    • पिछला :=पिछला का अगला

    • curr :=अगला curr

  • वापसी सिर

उदाहरण (पायथन)

आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -

class ListNode:
   def __init__(self, val=0, next=None):
      self.val = val
      self.next = next

def make_list(elements):
   head = ListNode(elements[0])
   for element in elements[1:]:
      ptr = head
      while ptr.next:
         ptr = ptr.next
      ptr.next = ListNode(element)

   return head

def print_list(head):
   ptr = head
   print('[', end = "")
   while ptr:
      print(ptr.val, end = ", ")
      ptr = ptr.next
   print(']')

def solve(head, m, n):
   prev = curr = head
   q = 0
   p = 0

   while curr:
      q += 1
      if q == m:
         for i in range(n):
            if curr.next is not None:
               curr = curr.next
         prev.next = curr.next
         q = 0

      prev = prev.next
      curr = curr.next

   return head

head = ListNode()
elements = [1, 2, 3, 4, 5, 6, 7, 8]
head = make_list(elements)
res = solve(head, 3, 1)
print_list(res)

इनपुट

[1, 2, 3, 4, 5, 6, 7, 8], 3, 1

आउटपुट

[1, 2, 3, 5, 6, 7,]

  1. पायथन में एक लिंक्ड सूची की लंबाई

    मान लीजिए कि हमारे पास एक एकल लिंक की गई सूची है, हमें इसकी लंबाई ज्ञात करनी है। लिंक की गई सूची में अगले और वैल फ़ील्ड हैं। 3] जैसा है, तो आउटपुट 7 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - गिनती :=0 जबकि नोड शून्य नहीं है, करें गिनती :=गिनती + 1 नोड:=नोड के बगल में वापसी की संख्य

  1. पायथन में पालिंड्रोम लिंक्ड लिस्ट

    मान लीजिए कि हमारे पास एक लिंक्ड सूची है। हमें यह जांचना होगा कि सूची के तत्व एपेलिंड्रोम बना रहे हैं या नहीं। तो अगर सूची तत्व [1,2,3,2,1] जैसा है, तो यह एक पैलिंड्रोम है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - तेज:=सिर, धीमा:=सिर, रेव:=कोई नहीं और झंडा:=1 यदि सिर खाली है, तो सही ल

  1. पायथन में एक लिंक्ड सूची में नोड हटाएं

    मान लीजिए कि हमारे पास कुछ तत्वों के साथ एक लिंक्ड सूची है। हमारा काम एक फ़ंक्शन लिखना है जो दिए गए नोड को सूची से हटा देगा। तो अगर सूची 1 → 3 → 5 → 7 → 9 की तरह है, और 3 को हटाने के बाद, यह 1 → 5 → 7 → 9 होगा। मान लें कि हमारे पास पॉइंटर नोड है जो इंगित करता है कि नोड को हटाया जाना है, हमें नोड को