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

पायथन में एक लिंक्ड सूची के आंतरिक नोड्स को उलटने का कार्यक्रम

मान लीजिए कि हमारे पास लिंक की गई सूची है, हमारे पास दो मान i और j भी हैं, हमें लिंक की गई सूची को i से jth नोड्स में उलटना होगा। और अंत में अद्यतन सूची लौटाएं।

इसलिए, यदि इनपुट [1,2,3,4,5,6,7,8,9] i =2 j =6 जैसा है, तो आउटपुट [1, 2, 7, 6, 5, 4 होगा। , 3, 8, 9, ]

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

  • prev_head :=एक लिंक्ड सूची नोड बनाएं जिसका मान शून्य के समान हो और जो नोड को इंगित करता हो
  • पिछला:=पिछला_सिर, वक्र:=नोड
  • 0 से i तक के सभी मानों के माध्यम से पुनरावृति करें
    • पिछला :=curr, curr :=अगला curr
  • rev_before :=prev, Rev_end :=curr
  • 0 से (j - i) तक के सभी मानों के माध्यम से पुनरावृति करें, करें
    • tmp :=curr के आगे
    • करी के आगे :=पिछला
    • पिछला, वर्तमान:=curr, tmp
  • rev_before के आगे:=पिछला, Rev_end.next:=curr
  • prev_head के आगे वापसी

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

उदाहरण

class ListNode:
   def __init__(self, data, next = None):
      self.val = data
      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(']')

class Solution:
   def solve(self, node, i, j):
      prev_head = ListNode(None, node)
      prev, curr = prev_head, node

      for _ in range(i):
         prev, curr = curr, curr.next
   
      rev_before, rev_end = prev, curr

      for _ in range(j - i + 1):
         tmp = curr.next
         curr.next = prev
         prev, curr = curr, tmp

      rev_before.next, rev_end.next = prev, curr

      return prev_head.next

ob = Solution()
head = make_list([1,2,3,4,5,6,7,8,9])
i = 2
j = 6
print_list(ob.solve(head, i, j))

इनपुट

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

आउटपुट

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

  1. पायथन में लिंक की गई सूची में नोड्स को स्वैप करने का कार्यक्रम

    मान लीजिए कि हमारे पास एक सूची L और दूसरा मान k है। हमें शुरू से kth नोड और अंत से kth नोड को स्वैप करना होगा और अंत में अंतिम सूची वापस करनी होगी। इसलिए, यदि इनपुट L =[1,5,6,7,1,6,3,9,12] k =3 जैसा है, तो आउटपुट [1,5,3,7,1,6, 6,9,12], शुरू से तीसरा नोड 6 है और अंत से 3 है, इसलिए उनकी अदला-बदली की

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

    जब किसी सूची में किसी दी गई श्रेणी को उलटने की आवश्यकता होती है, तो इसे फिर से चालू किया जाता है और : ऑपरेटर को स्लाइसिंग के साथ इसे उलटने के लिए उपयोग किया जाता है। उदाहरण नीचे उसी का एक प्रदर्शन है my_list = ["Hi", "there", "how", 'are', 'you'] print

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

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