数据结构算法设计题:编写代码将两个非递减的有序链表合并为一个非递增的有序链表,要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间,表中允许有重复数据
时间: 2024-11-21 19:06:27 浏览: 7
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
这是一个经典的链表合并问题,通常被称为“归并排序链表”或“合并两个已排序链表”。解决这个问题的关键在于遍历两个输入链表,并按照非递增顺序连接节点。以下是Python中的一种解决方案:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def merge_sorted_lists(l1, l2):
dummy = ListNode(0) # 创建虚拟头节点
current = dummy # 当前指向的结果节点
while l1 and l2: # 只要有一个链表还有元素
if l1.val <= l2.val: # 将较小值的节点添加到结果链表
current.next = l1
l1 = l1.next
else: # 否则,将较大值的节点添加
current.next = l2
l2 = l2.next
current = current.next # 移动当前指针
# 如果其中一个链表已经结束,把另一个链表剩余部分接到结果链表尾部
current.next = l1 or l2
return dummy.next # 返回新链表的头节点,不包括虚拟头节点
# 使用示例
l1 = ListNode(1, ListNode(2, ListNode(4)))
l2 = ListNode(1, ListNode(3, ListNode(4)))
merged_list = merge_sorted_lists(l1, l2)
```
阅读全文