从两个在Python中具有一些Common节点的排序链表中构造一个最大和链表

假设我们有两个排序的链表,我们必须制作一个链表,该链表包含从起点到终点的最大和路径。最终列表可能包含来自两个输入列表的节点。

在创建结果列表时,我们可能仅针对相交点(列表中具有相同值的两个节点)切换到其他输入列表。我们必须使用恒定量的额外空间来解决它。

因此,如果输入像[6,8,35,95,115,125],[5,8,17,37,95,105,125,135],则输出将为[6,8,17,37,95,115,125,135]

为了解决这个问题,我们将遵循以下步骤-

  • 结果:=无

  • 上一页1:= a,当前1:= a

  • 上一页2:= b,当前2:= b

  • 当current1不等于None或current2不等于None时,执行

    • current2:= current2的下一个

    • current1:= current1的下一个

    • 如果res1> res2,则

    • 除此以外,

    • 下一个上一个2:=下一个上一个1

    • next1的下一个:= previous2的下一个

    • 结果(= res1> res2)时为previous1,否则为previous2

    • 当current1不为null时,执行

    • res1:= res1 + current1的数据

    • current1:= current1的下一个

    • 当current2不为null时,执行

    • res2:= res2 + current2的数据

    • current2:= current2的下一个

    • 如果current1的数据<current2的数据,则

    • 除此以外,

    • res1:= res1 + current1的数据

    • current1:= current1的下一个

    • res2:= res2 + current2的数据

    • current2:= current2的下一个

    • res1:= 0,res2:= 0

    • 当current1和current2不为null并且current1的数据与current2的数据不同时,执行

    • 如果current1为null,则

    • 如果current2为null,则

    • 如果previous1与a相同,previous2与b相同,则

    • 除此以外,

    • 上一页1:=当前1

    • previous2:=当前2

    • 如果current1不为null,则

    • 如果current2不为null,则

    • 显示结果的内容。

    示例

    让我们看下面的实现以更好地理解-

    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