如何有效地合并两个已排序的链表?
时间: 2024-10-06 19:03:44 浏览: 36
合并两个已排序的链表是一个常见的操作,可以采用迭代或递归的方式来实现。以下是两种常见方法:
1. **迭代法**:
- 创建一个新的头节点 `newHead` 和两个指针 `p1` 和 `p2` 分别指向两个链表的头部。
- 比较 `p1` 和 `p2` 指向的元素,将较小的那个元素添加到新的链表,并移动相应的指针。
- 当其中一个链表遍历完时,将另一个链表剩余的部分连接到新链表的末尾。
- 返回新的头节点 `newHead`。
2. **递归法**:
- 如果只有一个链表或者两个链表都为空,直接返回它们。
- 否则,比较两个链表当前节点的值,选择较小的一个作为新链表的当前节点,并递归地合并剩下的部分。
- 最终返回较小节点的链表作为结果。
在这个过程中,需要注意合并后的链表仍然需要保持有序。下面是伪代码示例:
```python
def merge_sorted_lists(l1, l2):
if not l1 or not l2:
return l1 or l2
elif l1.val <= l2.val:
l1.next = merge_sorted_lists(l1.next, l2)
return l1
else:
l2.next = merge_sorted_lists(l1, l2.next)
return l2
```
阅读全文