python 合并两个排序的链表

剑指offer第25题:

输入两个递增的链表,合并他们,并且输出的链表也是递增的
# _*_ encoding:utf-8 _*_

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'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值