假设有两个按元素值递增有序排列的线性表a和b,均以单链表作存储结构,请编写算法将表a和表b归并成一个按元素非递减有序(允许值相同)排列的线性表c。
时间: 2023-04-20 18:04:20 浏览: 124
有两张单调递增有序的线性表A和B-采用顺序存储结构-将这两张表合并成C表-要求C表单调递减有序。Wo.pdf
算法如下:
1. 定义三个指针p、q、r,分别指向表a、表b、表c的当前节点。
2. 比较p和q所指节点的值,将较小的节点插入到表c的末尾,并将指针后移一位。
3. 如果p或q已经到达表尾,则将另一个表的剩余节点插入到表c的末尾。
4. 返回表c。
具体实现如下:
```
List merge(List a, List b) {
List c = new List();
Node p = a.head, q = b.head, r = c.head;
while (p != null && q != null) {
if (p.value <= q.value) {
r.next = p;
p = p.next;
} else {
r.next = q;
q = q.next;
}
r = r.next;
}
if (p != null) {
r.next = p;
}
if (q != null) {
r.next = q;
}
return c;
}
```
阅读全文