将两个非递减的有序链表合并为一个非递增的 有序链表,如何实现? 要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间O 表中允许有重复的数据。
时间: 2024-10-06 13:02:54 浏览: 65
将两个非递减的有序链表合并为一个非递增的有序链表,可以使用迭代或递归的方式实现。这里我会给出一种迭代的方法:
1. 创建一个新的头节点 `dummy` 和两个指针 `prev` 和 `cur`,分别初始化为 `dummy` 和两个链表的头结点。
2. 比较两个链表当前节点的值,选择较小的一个作为新链表的下一个节点,并更新指针。如果它们相等,则可以选择任意一个,因为我们要保持非递增顺序。
3. 将较小节点指向的链表移动到 `prev`,然后将 `prev` 更新为刚刚添加的新节点。
4. 如果其中一个链表已经遍历完,那么将另一个链表剩余部分连接到 `prev` 的后面。
5. 当 `cur` 都遍历完了,`prev` 就是指向新合并后的链表的尾部。
以下是伪代码描述:
```python
def merge_sorted_lists(list1, list2):
dummy = ListNode(0) # 新链表头部
prev = dummy
cur1 = list1
cur2 = list2
while cur1 and cur2:
if cur1.val <= cur2.val:
prev.next = cur1
cur1 = cur1.next
else:
prev.next = cur2
cur2 = cur2.next
prev = prev.next
# 如果其中一个链表已空,直接链接另一个
if cur1:
prev.next = cur1
elif cur2:
prev.next = cur2
return dummy.next # 返回新的链表头
```
阅读全文