设计一算法,实现将一个递减的数组 A[0..n-1]和一个带头结点的递增单链表B合并成一个带头结点的递增链表C。已知单链表的数据定义为: struct SingleLink{ ElemType data; SingleLink *next; }; 请用函数原型: SingleLink *LinkAAndB( ElemType A[], int n, SingleLink *B); 数组A和要链接的单链表B通过函数参数传递,n是数组的规模。函数返回值是生成的链表。
时间: 2023-03-26 21:01:41 浏览: 131
可以回答这个问题。算法如下:
SingleLink *LinkAAndB( ElemType A[], int n, SingleLink *B){
SingleLink *C = new SingleLink; // 创建头结点
C->next = NULL; // 初始化为空链表
SingleLink *p = C; // p指向链表C的尾结点
int i = ;
while(B->next != NULL && i < n){ // 遍历链表B和数组A
if(B->next->data < A[i]){ // 如果B的下一个结点的值小于A[i],则将B的下一个结点插入到C中
SingleLink *q = B->next;
B->next = q->next;
q->next = p->next;
p->next = q;
p = q;
}else{ // 否则将A[i]插入到C中
SingleLink *q = new SingleLink;
q->data = A[i];
q->next = p->next;
p->next = q;
p = q;
i++;
}
}
// 将剩余的元素插入到C中
while(B->next != NULL){
SingleLink *q = B->next;
B->next = q->next;
q->next = p->next;
p->next = q;
p = q;
}
while(i < n){
SingleLink *q = new SingleLink;
q->data = A[i];
q->next = p->next;
p->next = q;
p = q;
i++;
}
return C;
}
阅读全文