কম্পিউটার

পাইথনে লিঙ্ক করা তালিকা থেকে m নোডের পরে n নোড মুছে ফেলার প্রোগ্রাম


ধরুন আমাদের একটি লিঙ্ক করা তালিকা দেওয়া হয়েছে যেখানে স্টার্ট নোডটি "হেড" হিসাবে রয়েছে এবং দুটি পূর্ণসংখ্যা 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 নোড মুছে ফেলার প্রোগ্রাম

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • পূর্ববর্তী :=মাথা

  • curr :=মাথা

  • q :=0

  • p :=0

  • curr শূন্য না হলে, করুন

    • q :=q + 1

    • যদি q m এর সমান হয়, তাহলে

      • 0 থেকে n রেঞ্জের জন্য, করুন

        • যদি curr.next শূন্য না হয়, তাহলে

          • curr :=curr এর পরবর্তী

      • পূর্বের পরের :=curr এর পরবর্তী

      • q :=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. একটি লিঙ্ক করা তালিকার সমস্ত নোড মুছে ফেলার প্রোগ্রাম যার মান পাইথনের মতই

  2. পাইথনে লিঙ্ক করা তালিকার দৈর্ঘ্য

  3. পাইথনে প্যালিনড্রোম লিঙ্কড তালিকা

  4. পাইথনে লিঙ্কযুক্ত তালিকায় নোড মুছুন