设有两个单链表A、B,其中元素递增有序,本题要求实现一个函数merge(LinkList A, LinkList B),将A、B归并成一个按元素值递减(允许有相同值)有序的链表C,要求用A、B中的原结点形成,不能重新申请结点。。
时间: 2024-04-30 09:23:22 浏览: 111
设A和B是两个单链表,其表中元素递增有序
5星 · 资源好评率100%
算法思路:
1. 定义一个新链表C,同时定义两个指针p和q分别指向链表A和B的头结点。
2. 比较p和q所指向结点的元素值,将较大的结点插入到链表C的头部,然后将p或q指针后移一位。
3. 重复第2步直到链表A或B为空。
4. 将链表A或B中剩余的结点插入链表C中。
5. 返回链表C的头结点。
代码实现:
```python
def merge(A, B):
# 定义新链表C和指针p、q
C = None
p, q = A, B
# 比较p和q所指向结点的元素值,将较大的结点插入到链表C的头部
while p and q:
if p.val > q.val:
p, q = q, p
tmp = p.next
p.next = C
C = p
p = tmp
# 将链表A或B中剩余的结点插入链表C中
while p:
tmp = p.next
p.next = C
C = p
p = tmp
while q:
tmp = q.next
q.next = C
C = q
q = tmp
# 返回链表C的头结点
return C
```
阅读全文