题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
来源:力扣(LeetCode)
- 示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解题思路
- 建立一个虚拟头节点,并比较两个链表的头节点。
- 因为两个链表皆为有序排列。
- 时间复杂度可以控制在 O(N) ,两个链表皆各遍历一次。
- 要考虑任一个链表为空的情形,最后条件判断用
if .. else..
写,只需要判断一次,能够节省算法时间。
Python 代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
dummy = ListNode()
cur = dummy
while l1 and l2:
if l1.val <= l2.val:
cur.next = l1
cur = cur.next
l1 = l1.next
else:
cur.next= l2
cur = cur.next
l2 = l2.next
if l1:
cur.next = l1
else:
cur.next= l2
# if not l1:
# cur.next = l2
# if not l2:
# cur.next = l1
return dummy.next