将两个有序单链表合并(一元多项式的表示和相加)编写算法
时间: 2024-10-13 11:17:22 浏览: 40
将两个已排序的整数单链表合并并形成一个新的有序链表,可以采用递归或迭代的方式来实现。这里我们假设链表节点包含一个整数值(代表多项式系数),并且链表本身也存储了这个值。
首先,我们可以创建一个新的头节点,然后遍历两个链表:
1. 如果其中一个链表为空,则直接返回另一个非空链表。
2. 如果两个链表当前节点的值都是正数,并且第一个链表的当前节点小于第二个链表的当前节点,将第一个链表的当前节点添加到新链表,并移动指针到下一个节点。
3. 否则,将第二个链表的当前节点添加到新链表,并移动指针。
4. 当遍历完任一链表后,将剩余的链表节点添加到新链表上。
以下是使用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
# 将剩余的链表连接到新链表尾部
if l1 is not None:
current.next = l1
elif l2 is not None:
current.next = l2
return dummy.next # 返回新链表的头节点
# 示例:
l1 = ListNode(1, ListNode(2, ListNode(4)))
l2 = ListNode(1, ListNode(3))
merged_list = merge_sorted_lists(l1, l2)
```
在这个例子中,`merge_sorted_lists`函数接受两个链表的头节点作为输入,返回合并后的链表头节点。这个算法的时间复杂度是O(M+N),其中M和N分别是两个链表的长度。
阅读全文