输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
代码实现:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
if not l1: # l1为空时
return l2
elif not l2: # l2为空时
return l1
pre_p = ListNode(None) # l2中的所有结点元素都小于l1的第一个结点元素时,不将l1前加个空结点会出错,比如示例2
pre_p.next = l1
l1 = pre_p
p = pre_p.next
q = l2
while p and q:
if p.val <= q.val:
pre_p = p
p = p.next
else:
l2 = q.next
q.next = p
pre_p.next = q
pre_p = pre_p.next
q = l2
if not p:
pre_p.next = l2
return l1.next
if __name__ == '__main__':
def create_list(l):
head = ListNode(None)
p = head
for x in l:
p.next = ListNode(x)
p = p.next
l = head.next
return l
def show_result(result):
while result:
print(result.val)
result = result.next
solution = Solution()
# 示例1
l1 = [1, 2, 4]
l2 = [1, 3, 4]
l1 = create_list(l1)
l2 = create_list(l2)
result = solution.mergeTwoLists(l1, l2)
show_result(result)
# 示例2
print('*'*30)
l1 = [5]
l2 = [1, 3, 4]
l1 = create_list(l1)
l2 = create_list(l2)
result = solution.mergeTwoLists(l1, l2)
show_result(result)
"""
运行结果:
1
1
2
3
4
4
******************************
1
3
4
5
Process finished with exit code 0
"""
[题目来源于leetcode剑指offer]