Loading

Leetcode - 21. 合并两个有序链表

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非递减顺序 排列

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解1 2021/8/29 O(logn)

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
    def __repr__(self):
        return '{}'.format(self.val) + (('->' + self.next.__repr__()) if self.next else '')

def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode:
    # 正常链表操作就行
    # 这里试试转成list,sort,再创建ListNode,看超不超时
    l=[]
    while l1:
        l.append(l1.val)
        l1=l1.next
    while l2:
        l.append(l2.val)
        l2=l2.next
    l.sort()
    dummy=ListNode(-1)
    tmp=dummy
    for x in l:
        tmp.next=ListNode(x)
        tmp=tmp.next
    return dummy.next

if __name__ == '__main__':
    l1=ListNode(1,ListNode(2,ListNode(4)))
    l2=ListNode(1,ListNode(3,ListNode(4)))
    print(mergeTwoLists(l1,l2))
    print(mergeTwoLists(None,None))
    print(mergeTwoLists(None,ListNode(0)))
    l1=ListNode(5,ListNode(12))
    l2=ListNode(1,ListNode(3,ListNode(4)))
    print(mergeTwoLists(l1,l2))

这么蠢的解法竟然还挺快,有点意思

posted @ 2021-08-29 20:19  wwcg2235  阅读(36)  评论(0)    收藏  举报