剑指 offer输入两个单调递增的链表输出两个链表合成后的链表当然我们需要合成后的链表满足单调不减规则。
要合并两个单调递增的链表,可以使用递归的方法。假设两个链表分别为list1和list2。
首先,判断list1和list2是否为空,如果其中一个链表为空,直接返回另一个链表。然后判断list1和list2的头节点的值,将较小的节点作为合并后的链表的头节点。然后,递归地合并剩余的节点。
具体的步骤如下:
- 如果list1为空,返回list2。
- 如果list2为空,返回list1。
- 如果list1的头节点的值小于等于list2的头节点的值,将list1的头节点作为合并后的链表的头节点,然后递归地合并list1的剩余节点和list2。
- 如果list1的头节点的值大于list2的头节点的值,将list2的头节点作为合并后的链表的头节点,然后递归地合并list1和list2的剩余节点。
代码如下:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def mergeTwoLists(list1, list2):
if not list1:
return list2
if not list2:
return list1
if list1.val <= list2.val:
merged = list1
merged.next = mergeTwoLists(list1.next, list2)
else:
merged = list2
merged.next = mergeTwoLists(list1, list2.next)
return merged
时间复杂度分析:假设两个链表的长度分别为m和n,合并两个链表的过程需要遍历所有的节点,所以时间复杂度为O(m + n)。
空间复杂度分析:递归的过程中需要使用系统栈空间,栈的深度为两个链表的最大长度,所以空间复杂度为O(max(m, n))
原文地址: https://www.cveoy.top/t/topic/ikUG 著作权归作者所有。请勿转载和采集!