题目描述:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
分析:
一、维护一个当前节点cur,以及节点l1和l2。若l1和l2非空,如果l1的值小于l2的值,则将l1添加到cur.next中,反之则将l2添加到cur.next之中,并不断遍历下去。
二、考虑l1和l2为空的情况。
代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if not l1 and not l2:
return None
if not l1:
return l2
if not l2:
return l1
head = cur = ListNode(-1)
while l1 and l2:
if l1.val < l2.val:
cur.next = l1
l1 = l1.next
elif l2.val <= l1.val:
cur.next = l2
l2 = l2.next
cur = cur.next
cur.next = l1 if l1 else l2
return head.next
复杂度:
时间复杂度为O( n n n),空间复杂度为O( 1 1 1)。