📅  最后修改于: 2023-12-03 15:37:09.962000             🧑  作者: Mango
在进行链表操作时,经常需要将两个未排序的链表合并为一个新的排序好的链表。本文将介绍如何通过编写代码实现此功能。
实现该功能需要用到归并排序中的合并操作。具体思路如下:
def mergeTwoLists(l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
new_list = ListNode(0) # 定义一个新的链表并将指针指向它
ptr = new_list
while l1 and l2: # 比较两个链表中节点的大小并将较小值放入结果链表中
if l1.val > l2.val:
ptr.next = l2
l2 = l2.next
else:
ptr.next = l1
l1 = l1.next
ptr = ptr.next
ptr.next = l1 or l2 # 将剩余的非空链表添加到结果链表之后
return new_list.next # 返回结果链表
在该算法中,需要遍历两个未排序的链表。因此,时间复杂度为 $O(n)$。由于需要新创建一个链表,因此空间复杂度为 $O(n)$。