设有带头结点单链表A(a->d->m)和B(b->i->k->s-T),其结点均已按值升序排列,编写一个算法将他们合并成一个按值升序排列的带头结点单链表C
时间: 2024-09-15 12:13:11 浏览: 41
b-shu.zip_/b-树
为了将两个已排序的带头结点单链表A和B合并成一个新的按升序排列的链表C,可以采用迭代或递归的方式。这里我提供一种基于迭代的解决方案:
1. 初始化三个指针,分别指向A、B的头节点以及新的链表C的头节点(初始时C为空)。
2. 当A和B都有节点时,比较A和B的当前节点值:
- 如果A的值小于B的值,则将A的节点添加到C的尾部,并移动A的指针;
- 否则,如果B的值小于等于A的值,则将B的节点添加到C的尾部,并移动B的指针。
3. 继续上述步骤,直到其中一个链表的头节点变为`NULL`。此时,将另一个链表剩余部分添加到C的尾部。
4. 最后,检查C的最后一个节点,确认它是否为非空(因为可能存在只有一个链表的情况),如果最后一个节点的下一个指针为`NULL`,需要手动将其设置为`NULL`,表示链表结束。
以下是这个过程的伪代码表示:
```python
def merge_sorted_lists(A, B):
C = ListNode(0)
pa, pb, pc = A, B, C
while pa and pb:
if pa.val < pb.val:
pc.next = pa
pa = pa.next
else:
pc.next = pb
pb = pb.next
pc = pc.next
# 将未遍历完的链表添加到C的尾部
if pa:
pc.next = pa
elif pb:
pc.next = pb
return C.next
```
阅读全文