假设两个按元素值递增有序排列的线性表A和B,均以单链表作为存储结构,请编写算法,将A表和 表归并成一个按元素值递减有序排列的线性表C,并要求利用原表的(即A表和B表的)结点空间存储表C。
时间: 2023-05-17 13:06:12 浏览: 108
有两张单调递增有序的线性表A和B-采用顺序存储结构-将这两张表合并成C表-要求C表单调递减有序。Wo.pdf
可以使用归并排序的思想来解决这个问题。具体步骤如下:
1. 定义三个指针,分别指向A表、B表和C表的当前结点。
2. 比较A表和B表当前结点的元素值,将较小的结点插入到C表的头部,并将指向该结点的指针向后移动一位。
3. 重复步骤2,直到A表或B表的当前结点为空。
4. 将剩余的结点插入到C表的头部。
5. 返回C表的头结点。
具体实现可以参考以下代码:
ListNode* merge(ListNode* A, ListNode* B) {
ListNode* C = nullptr;
ListNode* p = nullptr;
while (A != nullptr && B != nullptr) {
if (A->val < B->val) {
ListNode* tmp = A;
A = A->next;
tmp->next = C;
C = tmp;
} else {
ListNode* tmp = B;
B = B->next;
tmp->next = C;
C = tmp;
}
}
while (A != nullptr) {
ListNode* tmp = A;
A = A->next;
tmp->next = C;
C = tmp;
}
while (B != nullptr) {
ListNode* tmp = B;
B = B->next;
tmp->next = C;
C = tmp;
}
return C;
}
阅读全文