1.请设计- -个算法并编程实现:将两个递增的有序链表合并为-个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据。
时间: 2024-10-21 21:17:25 浏览: 32
设计算法和编程实现如下:
首先,我们需要定义链表节点结构,然后创建一个函数`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`来处理链表的合并,避免直接修改原链表。当其中一个链表遍历完毕,我们就把另一个链表剩余部分接到合并后的链表上。
阅读全文