#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct Node
{
int value;
struct Node *next;
};
typedef struct Node Node;
Node* sortList(Node* head)
{
Node* newHead = NULL;
while (head != NULL)
{
Node *prev = NULL, *cur = newHead, *tmp = head->next;
while (cur && cur->value < head->value)
{
prev = cur;
cur = cur->next;
}
head->next = cur;
if (prev)
prev->next = head;
else
newHead = head;
head = tmp;
}
return newHead;
}
void printList(const Node* head)
{
while (head)
{
head = head->next;
}
}
void freeList(Node *head)
{
while (head)
{
void *victim = head;
head = head->next;
}
}
int main()
{
Node* head = NULL, *tmp;
for (int i=0; i<20; ++i)
{
tmp
->value
= rand() % 100; tmp->next = head;
head = tmp;
}
printList(head);
head = sortList(head);
printList(head);
freeList(head);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KCnN0cnVjdCBOb2RlCnsKICAgIGludCB2YWx1ZTsKICAgIHN0cnVjdCBOb2RlICpuZXh0Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgTm9kZSBOb2RlOwoKCk5vZGUqIHNvcnRMaXN0KE5vZGUqIGhlYWQpCnsKICAgIE5vZGUqIG5ld0hlYWQgPSBOVUxMOwogICAgCiAgICB3aGlsZSAoaGVhZCAhPSBOVUxMKQogICAgewogICAgICAgIE5vZGUgKnByZXYgPSBOVUxMLCAqY3VyID0gbmV3SGVhZCwgKnRtcCA9IGhlYWQtPm5leHQ7CiAgICAgICAgd2hpbGUgKGN1ciAmJiBjdXItPnZhbHVlIDwgaGVhZC0+dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBwcmV2ID0gY3VyOwogICAgICAgICAgICBjdXIgPSBjdXItPm5leHQ7CiAgICAgICAgfQogICAgICAgIGhlYWQtPm5leHQgPSBjdXI7CiAgICAgICAgaWYgKHByZXYpCiAgICAgICAgICAgIHByZXYtPm5leHQgPSBoZWFkOwogICAgICAgIGVsc2UKICAgICAgICAgICAgbmV3SGVhZCA9IGhlYWQ7CiAgICAgICAgCiAgICAgICAgaGVhZCA9IHRtcDsKICAgIH0KICAgIAogICAgcmV0dXJuIG5ld0hlYWQ7Cn0KCgp2b2lkIHByaW50TGlzdChjb25zdCBOb2RlKiBoZWFkKQp7CiAgICB3aGlsZSAoaGVhZCkKICAgIHsKICAgICAgICBwcmludGYoIiVkICIsIGhlYWQtPnZhbHVlKTsKICAgICAgICBoZWFkID0gaGVhZC0+bmV4dDsKICAgIH0KICAgIGZwdXRjKCdcbicsIHN0ZG91dCk7Cn0KCnZvaWQgZnJlZUxpc3QoTm9kZSAqaGVhZCkKewogICAgd2hpbGUgKGhlYWQpCiAgICB7CiAgICAgICAgdm9pZCAqdmljdGltID0gaGVhZDsKICAgICAgICBoZWFkID0gaGVhZC0+bmV4dDsKICAgICAgICBmcmVlKHZpY3RpbSk7CiAgICB9Cn0KCgppbnQgbWFpbigpCnsKICAgIE5vZGUqIGhlYWQgPSBOVUxMLCAqdG1wOwogICAgCiAgICBzcmFuZCgodW5zaWduZWQpdGltZShOVUxMKSk7CiAgICAKICAgIGZvciAoaW50IGk9MDsgaTwyMDsgKytpKQogICAgewogICAgICAgIHRtcCA9IG1hbGxvYyhzaXplb2YgKnRtcCk7CiAgICAgICAgdG1wLT52YWx1ZSA9IHJhbmQoKSAlIDEwMDsKICAgICAgICB0bXAtPm5leHQgPSBoZWFkOwogICAgICAgIGhlYWQgPSB0bXA7CiAgICB9CiAgICAKICAgIHByaW50TGlzdChoZWFkKTsKICAgIGhlYWQgPSBzb3J0TGlzdChoZWFkKTsKICAgIHByaW50TGlzdChoZWFkKTsKICAgIGZyZWVMaXN0KGhlYWQpOwp9