【算法设计题】将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据。
时间: 2024-03-25 16:31:32 浏览: 119
首先,我们可以使用双指针的方法来解决这个问题。假设有两个链表 l1 和 l2,我们可以使用两个指针 p1 和 p2 分别指向这两个链表的头部。
我们创建一个新的指针 p3,用来表示合并后的链表。初始时,将 p3 指向 l1 和 l2 中较小的头节点,并将其作为合并后的链表的头节点。
然后,我们比较 p1 和 p2 指向节点的值,将较小值的节点链接到 p3 的后面,并将对应的指针向后移动一位。重复这个过程,直到其中一个链表遍历完毕。
最后,将剩余未遍历完的链表连接到合并后链表的尾部。
以下是具体的实现代码:
```python
def merge_sorted_lists(l1, l2):
# 处理其中一个链表为空的情况
if not l1:
return l2
if not l2:
return l1
# 确定合并后链表的头部
head = l1 if l1.val < l2.val else l2
p1, p2, p3 = l1, l2, head
while p1 and p2:
if p1.val < p2.val:
p3.next = p1
p1 = p1.next
else:
p3.next = p2
p2 = p2.next
p3 = p3.next
# 将剩余未遍历完的链表连接到合并后链表的尾部
p3.next = p1 if p1 else p2
return head
```
阅读全文