设有两个非递减有序的单链表 A 和 B。请写出算法,将 A 和 B“就地”归并成一个按元素值非递增有序的单链表 C
时间: 2024-09-25 22:02:44 浏览: 53
合并两个非递减有序的单链表A和B,并将其合并成一个新的按元素值非递增有序的链表C,可以采用双指针法。以下是算法步骤:
1. 初始化三个指针,分别指向A、B的头部,以及新链表C的头部,设为None。
2. 比较当前A和B链表的头节点值,选择较小的一个作为C的新节点,并将其添加到C中,然后移动相应的指针。如果其中一个链表为空,则将另一个链表的所有剩余节点添加到C中。
3. 如果当前A和B都有节点,继续比较它们的下一个节点,重复步骤2,直到有一个链表遍历完。
4. 最后,如果还剩下未处理的链表,将其剩余部分连接到C的尾部。
这个过程不需要额外的空间来创建新的链表,所以是"就地"归并。以下是伪代码表示:
```python
def merge_sorted_lists(A, B):
dummy = C = ListNode(None) # 创建虚拟头节点
while A and B:
if A.val <= B.val:
C.next = A
A = A.next
else:
C.next = B
B = B.next
C = C.next
# 添加剩余链表(如果有)
if A:
C.next = A
elif B:
C.next = B
return dummy.next # 返回新的链表C的头节点
```
阅读全文