21. Merge Two Sorted Lists
Easy
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
Example:
Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4
方法1:
合并两个有序的链表,每个链表从小到大排序。选择首个数字更小的那个链为主链,将另外一个链表插入到该链表中。
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
if not l1:
return l2
if not l2:
return l1
if not l1 and not l2:
return l1
node1, node2 = None, None
if l1.val <= l2.val:
node1, node2 = l1, l2
else:
node1, node2 = l2, l1
temp_node1, temp_node2 = node1, node2
pre_temp1 = None
while temp_node1 and temp_node2:
if temp_node2.val >= temp_node1.val:
pre_temp1 = temp_node1
temp_node1 = temp_node1.next
else:
temp2 = temp_node2.next
pre_temp1.next = temp_node2
temp_node2.next = temp_node1
pre_temp1 = temp_node2
temp_node2 = temp2
if temp_node2:
pre_temp1.next = temp_node2
return node1
方法2:递归
# 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:
if not l1 or not l2:
return l1 or l2
else:
if l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l2.next, l1)
return l2