创建单链表,以0结束
List *CreateList() {
List *head, *cnew, *tail;
head = (List*)malloc(sizeof(List));
head->next = NULL;
int num;
while (1) {
cin >> num;
if (num == 0) break; //输入0表示链表结束
cnew = (List*)malloc(sizeof(List));
cnew->data = num;
cnew->next = NULL;
if (head->next == NULL) head->next = cnew;
else tail->next = cnew;
tail = cnew;
}
return head;
}
合并为递减序列,利用尾插法
//归并两个链表并排序
List *List_merge(List *La, List *Lb) {
List *p, *q, *r;
p = La->next;
La->next = NULL;
q = Lb->next;
while (p != NULL && q != NULL) {
if (p->data < q->data) { //尾插法,结果与插入顺序相反
r = p->next;
p->next = La->next;
La->next = p;
p = r;
}
else {
r = q->next;
q->next = La->next;
La->next