问题
设带头结点且头指针为ha和hb的两线性表A和B分别表示两个集合。两表中元素皆为递增有序。请写一算法求A和B的并集。要求该并集中的元素仍保持递增有序,且要利用A和B原有结点空间。
分析
实际上思路和第9题类似,把B中有而A中没有的元素插入到A中去,不就是第9题么。只不过不用重新申请空间保存B的结点,直接用B的结点就行。
代码
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode * next;
}LNode, *LinkList;
void unionList(LinkList &l1, LinkList &l2) {
LNode *p = l1 -> next, *p1 = l1, *q = l2 -> next;
while(p && q) {
if(p -> data == q -> data) {///值相等,对应指针移动
p = p -> next;
q = q -> next;
p1 = p1 -> next;
}else if(p -> data < q -> data) {
p = p -> next;
p1 = p1 ->next;
}else if(p -> data > q -> data) {
LNode * q1 = q -> next;
q -> next = p;
p1 -> next = q;
p1 = p1 -> next;
q = q1;
}
}
}
源代码
http://123.206.59.223:8080/code/code/10.rar