设有带头结点单链表A(存储的数据如下图所示)和B(存储的数据如下图所示),其结点均已按值升序排列,编写一个算法将他们合并成一个按值升序排列的带头结点单链表C
时间: 2024-09-15 16:13:11 浏览: 47
数据结构:不带头结点单链表的实现及其一些基本操作.cpp
5星 · 资源好评率100%
要将两个已排序的单链表 A 和 B 合并成一个新的有序链表 C,我们可以采用迭代或递归的方式。这里提供一种简单的迭代方法:
1. **初始化**:
- 创建一个新链表 C,头结点设为 NULL。
- 定义两个指针,`pA` 指向链表 A 的头结点,`pB` 指向链表 B 的头结点。
2. **遍历和比较**:
- 当 `pA` 或 `pB` 不为空时,循环执行以下步骤:
a. 如果 `pA` 指向的节点值小于或等于 `pB` 指向的节点值,则将 `pA` 指向的节点添加到链表 C,并将 `pA` 移动到下一个节点;否则,将 `pB` 指向的节点添加到链表 C 并移至下一个节点。
b. 如果 `pA` 已经到达链表 A 的末尾,将剩下的 `pB` 节点依次添加到链表 C 中。
c. 如果 `pB` 已经到达链表 B 的末尾,将剩下的 `pA` 节点依次添加到链表 C 中。
3. **合并完成**:
- 链表 C 的尾部就是最终合并的结果。
这个过程会保证新链表 C 中的节点按照升序排列。以下是伪代码表示:
```python
def merge_sorted_lists(headA, headB):
dummy = ListNode(0) # 创建虚拟头节点
tail = dummy # 尾部指针
while headA is not None and headB is not None:
if headA.val <= headB.val:
tail.next = headA
headA = headA.next
else:
tail.next = headB
headB = headB.next
tail = tail.next
# 添加剩余未处理的链表节点
if headA is not None:
tail.next = headA
elif headB is not None:
tail.next = headB
return dummy.next
```
阅读全文