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

पायथन में दो सॉर्टेड लिंक्ड लिस्ट से मैक्सिमम सम लिंक्ड लिस्ट बनाना

समस्या विवरण

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

उदाहरण

लिस्ट 1: [6, 8, 35, 95, 115, 125]

लिस्ट 2: [5, 8, 17, 37, 95, 105, 125, 135]

आउटपुट: [6, 8, 17, 37, 95, 115, 125, 135]

एल्गोरिदम

  1. दो पॉइंटर्स current1, current2 और उनके previous पॉइंटर्स रखें
  2. जब तक दोनों खत्म न हों:
    • कॉमन नोड तक प्रत्येक पथ का योग res1, res2 गिनें
    • जिस पथ का योग अधिक हो, उसे चुनें (पॉइंटर्स जोड़कर)
    • कॉमन नोड पर previous पॉइंटर्स अपडेट करें
  3. परिणाम लिस्ट का हेड वापस करें

पायथन कार्यान्वयन

class LinkedList:
    class ListNode:
        def __init__(self, d):
            self.data = d
            self.next = None
    def __init__(self, data_set=[]):
        self.head = None
        for item in data_set:
            self.insert_node(item)
    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
        prev1, curr1 = a, a
        prev2, curr2 = b, b
        while curr1 or curr2:
            res1 = res2 = 0
            while curr1 and curr2 and curr1.data != curr2.data:
                if curr1.data < curr2.data:
                    res1 += curr1.data
                    curr1 = curr1.next
                else:
                    res2 += curr2.data
                    curr2 = curr2.next
            if not curr1:
                while curr2:
                    res2 += curr2.data
                    curr2 = curr2.next
            if not curr2:
                while curr1:
                    res1 += curr1.data
                    curr1 = curr1.next
            if prev1 == a and prev2 == b:
                result = prev1 if res1 > res2 else prev2
            else:
                if res1 > res2:
                    prev2.next = prev1.next
                else:
                    prev1.next = prev2.next
            prev1, prev2 = curr1, curr2
            if curr1: curr1 = curr1.next
            if curr2: curr2 = curr2.next
        while result:
            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. - पायथन प्रोग्राम: चेक करना कि दो लिस्ट्स में कम से कम एक कॉमन एलिमेंट है या नहीं

    इस समस्या में हम दो यूजर इनपुट लिस्ट का उपयोग करते हैं। हमारा कार्य चेक करना है कि कोई कॉमन एलिमेंट है या नहीं। हम बहुत सरल ट्रैवर्सल तकनीक का उपयोग करते हैं, दोनों लिस्ट्स को ट्रैवर्स करें और पहली लिस्ट के हर एलिमेंट को दूसरी लिस्ट के हर एलिमेंट के साथ चेक करें।उदाहरणInput: A = [10, 20, 30, 50] B =

  1. - पायथन प्रोग्राम: दो अनसॉर्टेड लिस्ट का सॉर्टेड मर्ज्ड लिस्ट बनाना

    यहां दो यूजर इनपुट लिस्ट दी गई हैं, दो लिस्ट्स के एलिमेंट्स अनसॉर्टेड हैं। हमारा कार्य इन दो अनसॉर्टेड ऐरे को मर्ज करना है और उसके बाद लिस्ट को सॉर्ट करना है।उदाहरणInput: A[] = {100, 50, 150} B[] = {200, 30, 20} Output: Merge List: {20, 30, 50, 100, 150, 200}एल्गोरिदमचरण 1: पहले दो यूजर इनपुट लिस्ट

  1. - दो सूचियों के सभी सामान्य तत्व प्रिंट करने के लिए पायथन प्रोग्राम

    समस्या विवरण दो सूचियां दी गई हैं, दोनों सूचियों के सभी सामान्य तत्व प्रिंट करें। उदाहरण इनपुट: L1 = [5, 6, 7, 8, 9] L2 = [5, 13, 34, 22, 90] आउटपुट: {5} व्याख्या दोनों सूचियों का सामान्य तत्व 5 है। एल्गोरिदम दो यूजर इनपुट सूचियां बनाएं। सूचियों को सेट में बदलें और फिर set1 & set2 प्रिंट करें।