#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node {
struct Node *next;
int data;
} Node;
void MoveNode(Node **dest, Node **source){
Node *newNode = *source;
*source = newNode->next;
newNode->next = *dest;
*dest = newNode;
}
Node *MergedSort(Node *a, Node *b) {
Node *head = NULL;
Node **tail = &head;
while(1) {
if (a == NULL){
*tail = b;
break;
} else if (b == NULL){
*tail = a;
break;
} else if (a->data < b->data){
MoveNode(tail, &a);
} else{
MoveNode(tail, &b);
}
tail = &((*tail)->next);
}
return head;
}
int main(void) {
Node
*a
= malloc(sizeof(Node
)); a->data = 1;
a
->next
= malloc(sizeof(Node
)); Node *t = a->next;
t->data = 3;
t
->next
= malloc(sizeof(Node
)); t = t->next;
t->data = 5;
t->next = NULL;
Node
*b
= malloc(sizeof(Node
)); b->data = 2;
b
->next
= malloc(sizeof(Node
)); t = b->next;
t->data = 4;
t
->next
= malloc(sizeof(Node
)); t = t->next;
t->data = 6;
t->next = NULL;
Node *r = MergedSort(a, b);
while (r) {
r = r->next;
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKdHlwZWRlZiBzdHJ1Y3QgTm9kZSB7CglzdHJ1Y3QgTm9kZSAqbmV4dDsKCWludCBkYXRhOwp9IE5vZGU7Cgp2b2lkIE1vdmVOb2RlKE5vZGUgKipkZXN0LCBOb2RlICoqc291cmNlKXsKICAgIE5vZGUgKm5ld05vZGUgPSAqc291cmNlOwogICAgKnNvdXJjZSA9IG5ld05vZGUtPm5leHQ7CiAgICBuZXdOb2RlLT5uZXh0ID0gKmRlc3Q7CiAgICAqZGVzdCA9IG5ld05vZGU7Cn0KCiAgICBOb2RlICpNZXJnZWRTb3J0KE5vZGUgKmEsIE5vZGUgKmIpIHsKICAgICAgICBOb2RlICpoZWFkID0gTlVMTDsKICAgICAgICBOb2RlICoqdGFpbCA9ICZoZWFkOwogICAgICAgIHdoaWxlKDEpIHsKICAgICAgICAgICAgaWYgKGEgPT0gTlVMTCl7CiAgICAgICAgICAgICAgICAqdGFpbCA9IGI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlIGlmIChiID09IE5VTEwpewogICAgICAgICAgICAgICAgKnRhaWwgPSBhOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYS0+ZGF0YSA8IGItPmRhdGEpewogICAgICAgICAgICAgICAgTW92ZU5vZGUodGFpbCwgJmEpOwogICAgICAgICAgICB9IGVsc2V7CiAgICAgICAgICAgICAgICBNb3ZlTm9kZSh0YWlsLCAmYik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGFpbCA9ICYoKCp0YWlsKS0+bmV4dCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBoZWFkOwogICAgfQoKCmludCBtYWluKHZvaWQpIHsKCU5vZGUgKmEgPSBtYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCWEtPmRhdGEgPSAxOwoJYS0+bmV4dCA9IG1hbGxvYyhzaXplb2YoTm9kZSkpOwoJTm9kZSAqdCA9IGEtPm5leHQ7Cgl0LT5kYXRhID0gMzsKCXQtPm5leHQgPSBtYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCXQgPSB0LT5uZXh0OwoJdC0+ZGF0YSA9IDU7Cgl0LT5uZXh0ID0gTlVMTDsKCU5vZGUgKmIgPSBtYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCWItPmRhdGEgPSAyOwoJYi0+bmV4dCA9IG1hbGxvYyhzaXplb2YoTm9kZSkpOwoJdCA9IGItPm5leHQ7Cgl0LT5kYXRhID0gNDsKCXQtPm5leHQgPSBtYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCXQgPSB0LT5uZXh0OwoJdC0+ZGF0YSA9IDY7Cgl0LT5uZXh0ID0gTlVMTDsKCU5vZGUgKnIgPSBNZXJnZWRTb3J0KGEsIGIpOwoJd2hpbGUgKHIpIHsKCQlwcmludGYoIiVkXG4iLCByLT5kYXRhKTsKCQlyID0gci0+bmV4dDsKCX0KCXJldHVybiAwOwp9Cg==