将两个非递减有序的单链表归并成一个,仍并保持非递减有序。
时间: 2023-05-27 20:06:54 浏览: 109
实现两个有序单链表的合并
5星 · 资源好评率100%
可以使用双指针法来解决这个问题。首先定义两个指针分别指向两个链表的头节点,然后比较它们的值的大小,将较小的节点加入到新链表中,并将指针向后移动一位。重复此过程直到其中一个链表遍历完成,然后将剩余的节点直接加入到新链表的尾部即可。
以下是示例代码:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def merge_two_lists(l1: ListNode, l2: ListNode) -> ListNode:
dummy = ListNode(0) # 定义一个哑节点作为新链表的头节点
cur = dummy # 定义一个指针指向新链表的当前节点
while l1 and l2:
if l1.val <= l2.val:
cur.next = l1
l1 = l1.next
else:
cur.next = l2
l2 = l2.next
cur = cur.next
cur.next = l1 if l1 else l2 # 将剩余的节点添加到新链表的尾部
return dummy.next # 返回新链表的头节点
```
时间复杂度:$O(m+n)$,其中 $m$ 和 $n$ 分别是两个链表的节点数。
空间复杂度:$O(1)$。
阅读全文