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

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


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

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

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

  • prev_head := नल मान वाले लिंक्ड लिस्ट नोड बनाएं जो node को इंगित करता है
  • prev := prev_head, curr := node
  • 0 से i तक के सभी मानों के माध्यम से पुनरावृति करें, करें
    • prev := curr, curr := curr का अगला
  • rev_before := prev, rev_end := curr
  • 0 से (j - i) तक के सभी मानों के माध्यम से पुनरावृति करें, करें
    • tmp := curr का अगला
    • curr का अगला := prev
    • prev, curr := curr, tmp
  • rev_before का अगला := prev, 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 है। हमें शुरुआत से k-वें नोड और अंत से k-वें नोड को स्वैप करना है और अंत में अंतिम लिस्ट वापस करना है। उदाहरण के लिए, यदि इनपुट L = [1,5,6,7,1,6,3,9,12], k = 3 है, तो आउटपुट [1,5,3,7,1,6,6,9,12] होगा, शुरुआत से 3रा नोड 6 है और अंत से 3 है, इसलिए वे स्वैप ह

  1. - पायथन प्रोग्राम: लिस्ट में एक रेंज को उल्टा करें

    जब लिस्ट में दी गई रेंज को उल्टा करना हो, तो इस पर इटरेट किया जाता है और इसे उल्टा करने के लिए : ऑपरेटर के साथ स्लाइसिंग का उपयोग किया जाता है। उदाहरण नीचे इसका प्रदर्शन है my_list = [Hi, there, how, are, you] print(The list is : ) print(my_list) m, n = 2, 4 my_result = [] for elem in my_list:

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

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