假设有两个按元素值递增有序排列的线性表a和b,均以单链表作存储结构,试编写算法将a表和b表归并成一个按元素值递减有序(即非递增有序,允许值相同)排列的线性表c,并要求利用原表(即a表和b表)的结点空间
时间: 2023-04-30 14:04:55 浏览: 118
题目描述:假设有两个按元素值递增有序排列的线性表A和B,均以单链表的形式存储。试编写算法将A表与B表归并为C表,且C表的元素值也按递增有序排列。
算法思路: 将A表和B表的元素按递增有序排列合并到C表中。需要使用三个指针分别指向A表、B表、C表的当前节点。当A表和B表中的元素都没有遍历完时,比较当前节点的大小,将小的值加入C表,同时将指向小值的指针后移一位。如果A表或B表已经全部遍历完成,直接将另一个表中剩余元素添加到C表中即可。
算法步骤:
1. 初始化指向A表、B表、C表的三个指针p、q、r
2. 当A表或B表当前元素未遍历完成时,比较当前元素大小
3. 将较小值的元素添加到C表中,同时将指向该元素的指针后移一位
4. 如果A表或B表已经全部遍历完成,直接将另一个表中剩余元素添加到C表中
5. 返回C表
代码实现:
def merge_sorted_list(A, B):
p = A.head
q = B.head
C = LinkedList()
r = C.head
while p is not None and q is not None:
if p.value <= q.value:
r.next = p
p = p.next
else:
r.next = q
q = q.next
r = r.next
if p is not None:
r.next = p
if q is not None:
r.next = q
return C
阅读全文