题目描述
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思路解答
比较简单,遍历两个链表,比较大小,加入新链表即可。
# 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:
return l2
if l2 is None:
return l1
#正式开始
p, q = l1, l2
#不妨设置虚拟头结点
virtualhead = ListNode(0)
vp = virtualhead
while p or q:
if p and q:
if p.val <= q.val:
vp.next = p
#vp = vp.next
p = p.next
else:
vp.next = q
#vp = vp.next
q = q.next
elif p:
vp.next = p
#vp = vp.next
p = p.next
else:
vp.next = q
#vp = vp.next
q = q.next
vp = vp.next
return virtualhead.next
结果:
执行用时 : 44 ms, 在Merge Two Sorted Lists的Python提交中击败了23.88% 的用户
内存消耗 : 11.7 MB, 在Merge Two Sorted Lists的Python提交中击败了34.70% 的用户
提交时间 | 状态 | 执行用时 | 内存消耗 | 语言 |
几秒前 | 通过 | 44 ms | 11.7MB | python |
# 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:
return l2
if l2 is None:
return l1
#正式开始
p, q = l1, l2
#不妨设置虚拟头结点
virtualhead = ListNode(0)
vp = virtualhead
while p and q:
if p.val <= q.val:
vp.next = p
#vp = vp.next
p = p.next
else:
vp.next = q
#vp = vp.next
q = q.next
vp = vp.next
if p:
vp.next = p
if q:
vp.next = q
return virtualhead.next
结果:
执行用时 : 40 ms, 在Merge Two Sorted Lists的Python提交中击败了53.32% 的用户
内存消耗 : 11.7 MB, 在Merge Two Sorted Lists的Python提交中击败了34.09% 的用户
提交时间 | 状态 | 执行用时 | 内存消耗 | 语言 |
几秒前 | 通过 | 40 ms | 11.7MB | python |
当然了,上面的两个if
还可以简化:vp.next = p if p else q
不过,运算量是一样的,只是代码量减少了。