কম্পিউটার টিউটোরিয়াল

পাইথনে দুটি সোর্টেড লিংকড লিস্ট থেকে সর্বোচ্চ যোগফল وال লিংকড লিস্ট তৈরি করুন


मान लीजिए हमारे पास दो सॉर्टेड लिंक्ड लिस्ट हैं, हमें एक लिंक्ड लिस्ट बनानी है जिसमें शुरुआती नोड से अंतिम नोड तक का सबसे बड़ा योग पथ हो। अंतिम लिस्ट में दोनों इनपुट लिस्ट के नोड्स हो सकते हैं।

जब हम परिणाम लिस्ट बना रहे होते हैं, तो हम केवल इंटरसेक्शन पॉइंट (दोनों लिस्ट में समान मान वाले दो नोड) के लिए दूसरी इनपुट लिस्ट पर स्विच कर सकते हैं। हमें इसे स्थिर अतिरिक्त स्थान का उपयोग करके हल करना होगा।

यदि इनपुट [6,8,35,95,115,125], [5,8,17,37,95,105,125,135] जैसा है, तो आउटपुट [6,8,17,37,95,115,125,135] होगा।

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

  • result := None
  • previous1 := a, current1 := a
  • previous2 := b, current2 := b
  • जब तक current1, None नहीं है या current2, None नहीं है, करें:
    • res1 := 0, res2 := 0
    • जब तक current1 और current2 null नहीं हैं और current1 का डेटा current2 के डेटा के समान नहीं है, करें:
      • यदि current1 का डेटा < current2 का डेटा, तो res1 += current1 का डेटा, current1 := current1.next
      • अन्यथा, res2 += current2 का डेटा, current2 := current2.next
    • यदि current1 null है, तो current2 null न होने तक res2 में current2 का डेटा जोड़ें और current2 := current2.next
    • यदि current2 null है, तो current1 null न होने तक res1 में current1 का डेटा जोड़ें और current1 := current1.next
    • यदि previous1 == a और previous2 == b, तो result := previous1 यदि res1 > res2 अन्यथा previous2
    • अन्यथा, यदि res1 > res2, तो previous2.next := previous1.next, अन्यथा previous1.next := previous2.next
    • previous1 := current1, previous2 := current2
    • यदि current1 null नहीं है, तो current1 := current1.next
    • यदि current2 null नहीं है, तो current2 := current2.next
  • result की सामग्री प्रदर्शित करें।

उदाहरण

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

class LinkedList(object):
    def __init__(self, data_set = []):
        self.head = None
        if len(data_set) > 0:
            for item in data_set:
                self.insert_node(item)
    class ListNode(object):
        def __init__(self, d):
            self.data = d
            self.next = None
    def insert_node(self, new_data):
        new_node = self.ListNode(new_data)
        new_node.next = self.head
        self.head = new_node
    def find_max_sum_list(self, a, b):
        result = None
        previous1 = a
        current1 = a
        previous2 = b
        current2 = b
        while current1 != None or current2 != None:
            res1 = 0
            res2 = 0
            while current1 != None and current2 != None and current1.data != current2.data:
                if current1.data < current2.data:
                    res1 += current1.data
                    current1 = current1.next
                else:
                    res2 += current2.data
                    current2 = current2.next
            if current1 == None:
                while current2 != None:
                    res2 += current2.data
                    current2 = current2.next
            if current2 == None:
                while current1 != None:
                    res1 += current1.data
                    current1 = current1.next
            if previous1 == a and previous2 == b:
                result = previous1 if (res1 > res2) else previous2
            else:
                if res1 > res2:
                    previous2.next = previous1.next
                else:
                    previous1.next = previous2.next
            previous1 = current1
            previous2 = current2
            if current1 != None:
                current1 = current1.next
            if current2 != None:
                current2 = current2.next
        while result != None:
            print(result.data, end = ' ')
            result = result.next

my_list1 = LinkedList([125,115,95,35,8,6])
my_list2 = LinkedList([135,125,105,95,37,17,8,5])
my_list1.find_max_sum_list(my_list1.head, my_list2.head)

इनपुट

[125,115,95,35,8,6], [135,125,105,95,37,17,8,5]

आउटपुट

6 8 17 37 95 115 125 135

  1. পাইথনে দুটি আনসোর্টেড লিস্ট মার্জ করে সোর্টেড লিস্ট তৈরি করা

  2. পাইথন প্রোগ্রাম: দুটি লিস্টে কমপক্ষে একটি কমন এলিমেন্ট আছে কিনা চেক করা

  3. দুটি আনসর্টেড লিস্ট থেকে সর্টেড মার্জড লিস্ট তৈরি করা (পাইথন)

  4. পাইথনে দুটি লিস্টের সাধারণ উপাদান প্রিন্ট করার প্রোগ্রাম