剑指offer第25题:
输入两个递增的链表,合并他们,并且输出的链表也是递增的
class ListNode:
def __init__(self):
self.value = None
self.next_node = None
class Solution:
def list_generate(self, lst):
"""
传入一个列表将其生成链表
"""
if not lst:
return False
node = ListNode()
node.value = lst[0]
if len(lst) == 1:
node.next_node = None
else:
node.next_node = self.list_generate(lst[1:])
return node
def merge_list(self, head_node1, head_node2):
"""
递增合并两个链表
维持两个指针
"""
if not head_node1:
return head_node2
elif not head_node2:
return head_node1
head_node = None
if head_node1.value <= head_node2.value:
head_node = head_node1
head_node.next_node = self.merge_list(head_node1.next_node, head_node2)
else:
head_node = head_node2
head_node.next_node = self.merge_list(head_node1, head_node2.next_node)
return head_node
if __name__ == '__main__':
lst1_all = [[], [1], [1,3,5,7,9,11], [1,4,6,8,9,10,13]]
lst2_all = [[], [1], [2], [1,3,4,6,7,10,11], [2,3,5,11,12,33]]
for lst1 in lst1_all:
for lst2 in lst2_all:
solution = Solution()
head_node1 = solution.list_generate(lst1)
head_node2 = solution.list_generate(lst2)
head_node = solution.merge_list(head_node1, head_node2)
node = head_node
print lst1, lst2,
if node:
while node:
print node.value,
node = node.next_node
if node:
print '->',
else:
print 'wrong'
print '\n'