https://leetcode-cn.com/problems/merge-two-sorted-lists/

# -*- coding:utf-8 -*-

# Definition for singly-linked list.
class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None
class Solution(object):
    def mergeTwoLists(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        if l1 is None and l2 is None:
            return
        if l1 is None or l2 is None:
            return l1 if l2 is None else l2
        if l1.val > l2.val:
            return self.mergeTwoLists(l2, l1)
        res = ListNode(l1.val)
        node = res
        l1 = l1.next
        while l1 is not None and l2 is not None:
            if l1.val < l2.val:
                node.next = l1
                l1 = l1.next
            else:
                node.next = l2
                l2 = l2.next
            node = node.next
        while l1 is not None:
            node.next = l1
            l1 = l1.next
            node = node.next
        while l2 is not None:
            node.next = l2
            l2 = l2.next
            node = node.next
        return res
if __name__ == '__main__':
    l1 = ListNode(-9)
    l2 = ListNode(3)
    # l3 = ListNode(4)
    l1.next = l2
    # l2.next = l3
    ll1 = ListNode(5)
    ll2 = ListNode(7)
    # ll3 = ListNode(4)
    ll1.next = ll2
    # ll2.next = ll3
    print(Solution().mergeTwoLists(l1, ll1))

思路:思路比较简单,依次遍历两个链表,比较当前标记位的大小,较小的重新链入新链表中。当有一个链表拆成空时说明另一个链表中任何一位都大。因此直接链入新链表的链尾即可。

思考:好像有的地方有点麻烦了傲,最后对单一链表插入链尾的操作不需要循环,只需要node.next = l1即可。毕竟已经是连好了的嘛。

分类: 算法

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注