设有带头结点单链表A和B,其结点均已按值升序排列,编写一个算法将他们合并成一个按值升序排列的带头结点单链表。
时间: 2024-09-14 19:11:57 浏览: 60
要合并两个已按值升序排列的带头结点单链表A和B,可以创建一个新的链表,并通过迭代或递归的方式将它们连接起来。这里提供一种简单的迭代方法:
1. 创建新链表C,初始化为一个空头结点。
2. 定义两个指针,分别指向A和B的头结点。
3. 比较两个当前指针所指节点的值:
- 如果A的值小于或等于B的值,将A的下一个节点添加到新链表C中,然后移动A指针。
- 否则,将B的下一个节点添加到新链表C中,然后移动B指针。
4. 当其中一个链表遍历完(即为空),将另一个链表剩余的部分直接添加到新链表的末尾。
5. 新链表C的头结点就是最终合并后的有序链表。
下面是伪代码描述:
```python
def merge_sorted_lists(headA, headB):
if not headA: return headB
if not headB: return headA
dummy = ListNode(0) # 创建虚拟头结点
tail = dummy
while headA and headB:
if headA.val <= headB.val:
tail.next = headA
headA = headA.next
else:
tail.next = headB
headB = headB.next
tail = tail.next
# 将剩余的链表添加到新链表末尾
if headA:
tail.next = headA
elif headB:
tail.next = headB
return dummy.next
```
阅读全文