1.请设计- -个算法并编程实现:将两个递增的有序链表合并为-个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据。
时间: 2024-10-21 07:17:25 浏览: 25
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
设计算法和编程实现如下:
首先,我们需要定义链表节点结构,然后创建一个函数`mergeTwoLists`来合并两个递增的有序链表。
```python
# 链表节点定义
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode:
# 创建头结点和临时指针
dummy_head = ListNode(0)
current = dummy_head
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
# 将剩余未遍历完的链表添加到新链表
if l1:
current.next = l1
elif l2:
current.next = l2
return dummy_head.next # 返回合并后的链表头结点
# 示例链表构造
l1 = ListNode(1, ListNode(2, ListNode(4)))
l2 = ListNode(1, ListNode(3, ListNode(4)))
# 合并链表
merged_list = mergeTwoLists(l1, l2)
```
在这个实现中,我们通过一个虚拟头结点`dummy_head`来处理链表的合并,避免直接修改原链表。当其中一个链表遍历完毕,我们就把另一个链表剩余部分接到合并后的链表上。
阅读全文