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

पायथन में लिंक्ड लिस्ट साइकिल


मान लीजिए हमारे पास एक लिंक्ड लिस्ट है, और हमें जांचना है कि क्या इसमें कोई साइकिल है या नहीं। दिए गए लिंक्ड लिस्ट में साइकिल को दर्शाने के लिए, हम एक पूर्णांक पॉइंटर pos का उपयोग करेंगे। यह pos लिंक्ड लिस्ट में एक स्थिति दर्शाता है जहां टेल जुड़ा हुआ है। यदि pos -1 है, तो लिंक्ड लिस्ट में कोई साइकिल मौजूद नहीं है। उदाहरण के लिए, लिंक्ड लिस्ट [5, 3, 2, 0, -4, 7] जैसी है, और pos = 1। तो एक साइकिल है, और टेल दूसरे नोड से जुड़ा हुआ है।

हल करने के चरण

  • एक सेट लें जिसे हैश सेट H कहा जाता है
  • जब तक head null नहीं है
    • यदि head H में मौजूद है, तो true वापस करें
    • head को H में जोड़ें
    • head := head का अगला
  • false वापस करें

उदाहरण

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

class ListNode:
    def __init__(self, data, next = None):
        self.data = 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 get_node(head, pos):
    if pos != -1:
        p = 0
        ptr = head
        while p < pos:
            ptr = ptr.next
            p += 1
        return ptr

class Solution(object):
    def hasCycle(self, head):
        hashS = set()
        while head:
            if head in hashS:
                return True
            hashS.add(head)
            head = head.next
        return False

head = make_list([5,3,2,0,-4,7])
last_node = get_node(head, 5)
pos = 1
last_node.next = get_node(head, pos)
ob1 = Solution()
print(ob1.hasCycle(head))

इनपुट

List = [5,3,2,0,-4,7] Pos = 1

आउटपुट

True

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

    मान लीजिए हमारे पास एक लिंक्ड लिस्ट है। हमें जांचना है कि लिस्ट के एलिमेंट्स पैलिंड्रोम बनाते हैं या नहीं। इसलिए यदि लिस्ट एलिमेंट [1,2,3,2,1] की तरह है, तो यह एक पैलिंड्रोम है। समाधान के चरण fast := head, slow := head, rev := None और flag := 1 यदि head खाली है, तो true लौटाएं जब fast और fast का n

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

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

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

    मान लीजिए हमारे पास एक लिंक्ड लिस्ट है, हमें इसे उल्टा करना है। यदि लिस्ट 1 → 3 → 5 → 7 जैसी है, तो नई उल्टी लिस्ट 7 → 5 → 3 → 1 होगी। इसे हल करने के लिए हम इस दृष्टिकोण का पालन करेंगे: लिस्ट रिवर्सल को पुनरावर्ती तरीके से करने के लिए एक प्रक्रिया परिभाषित करें solve(head, back) यदि head मौजूद नही