मान लीजिए हमारे पास दो सॉर्टेड लिंक्ड लिस्ट हैं, हमें एक लिंक्ड लिस्ट बनानी है जिसमें शुरुआती नोड से अंतिम नोड तक का सबसे बड़ा योग पथ हो। अंतिम लिस्ट में दोनों इनपुट लिस्ट के नोड्स हो सकते हैं।
जब हम परिणाम लिस्ट बना रहे होते हैं, तो हम केवल इंटरसेक्शन पॉइंट (दोनों लिस्ट में समान मान वाले दो नोड) के लिए दूसरी इनपुट लिस्ट पर स्विच कर सकते हैं। हमें इसे स्थिर अतिरिक्त स्थान का उपयोग करके हल करना होगा।
यदि इनपुट [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