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

Python में लिंक्ड लिस्ट के सॉर्टेड होने की जांच कैसे करें (इटरेटिव और रिकर्सिव)?

मान लीजिए हमारे पास एक लिंक्ड लिस्ट है हमें दो फ़ंक्शन परिभाषित करने हैं जो जांचते हैं कि लिंक्ड लिस्ट गैर-बढ़ते क्रम में सॉर्टेड है या नहीं। एक विधि इटरेटिव तरीके से काम करेगी और दूसरी रिकर्सिव तरीके से।

तो, यदि इनपुट L = [15, 13, 8, 6, 4, 2] है, तो आउटपुट True होगा।

हल करने के चरण

  • solve_iter() फ़ंक्शन परिभाषित करें। यह head लेगा
  • यदि head null है, तो:
    • True लौटाएं
  • जब तक head का next null नहीं है, तब तक:
    • current := head
    • यदि current का मान <= (current के next) का मान, तो:
      • False लौटाएं
    • head := head का next
  • True लौटाएं
  • solve_rec() फ़ंक्शन परिभाषित करें। यह head लेगा
  • यदि head null है या head का next null है, तो:
    • True लौटाएं
  • true लौटाएं जब (head का मान > head के next का मान 0 नहीं है और solve_rec(head का next) true है) अन्यथा false

उदाहरण

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 solve_iter(head):
    if head == None:
        return True
    while head.next != None:
        current = head
        if current.val <= current.next.val:
            return False
        head = head.next
    return True

def solve_rec(head):
    if head == None or head.next == None:
        return True
    return head.val > head.next.val and solve_rec(head.next)

L = make_list([15, 13, 8, 6, 4, 2])
print(solve_iter(L))
print(solve_rec(L))

इनपुट

[15, 13, 8, 6, 4, 2]

आउटपुट

True True
  1. - C++ में लिंक्ड सूची के वैकल्पिक विभाजन के लिए पुनरावर्ती दृष्टिकोण

    एक एकल लिंक्ड सूची इनपुट के रूप में दी गई है। लक्ष्य है सूची को दो एकल लिंक्ड सूचियों में विभाजित करना जिनमें मूल सूची के वैकल्पिक नोड्स हों। यदि इनपुट सूची में नोड्स a → b → c → d → e → f हैं, तो विभाजन के बाद दो उप-सूचियाँ a → c → e और b → d → f होंगी। हम दो पॉइंटर्स N1 और N2 लेते हैं, एक मूल सूची

  1. - C++ में पुनरावर्ती सम्मिलन और ट्रैवर्सल लिंक्ड सूची

    हमें पूर्णांक मान दिए गए हैं जिनका उपयोग लिंक्ड सूची बनाने के लिए किया जाएगा। कार्य है पहले एकल लिंक्ड सूची में नोड्स सम्मिलित करना और फिर पुनरावर्ती दृष्टिकोण का उपयोग करके इसे ट्रैवर्स करना। पुनरावर्ती रूप से अंत में नोड्स जोड़ना यदि head NULL है → head पर नोड जोड़ें। next पर जोड़ें। पुनरावर्ती

  1. C++ में सॉर्टेड और रोटेटेड लिंक्ड लिस्ट में रोटेशन की गिनती C++ में सॉर्टेड और रोटेटेड लिंक्ड लिस्ट में रोटेशन की गिनती

    हमें एक लिंक्ड लिस्ट दी गई है। लिस्ट पहले सॉर्ट की गई है और फिर K नोड्स द्वारा रोटेट की गई है। लक्ष्य K का मान ज्ञात करना है। यदि हमें नीचे दी गई लिंक्ड लिस्ट इनपुट के रूप में दी गई है जो K नोड्स द्वारा रोटेटेड है: तो मूल लिस्ट रही होगी: और हम यहाँ देख सकते हैं K=2 है। इनपुट लिंक्ड लिस्ट मूल सॉर्