#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int val;
struct node *next;
} Node;
Node *head = NULL;
Node* createN(int x){
Node *newnode;
newnode
= (Node
*)malloc(sizeof(Node
)); newnode->val = x;
newnode->next = NULL;
return newnode;
}
void freeL(){
Node *p;
while(head != NULL){
p = head->next;
head = p;
}
}
void printL(){
Node *p = head;
while(p != NULL){
p = p->next;
}
}
void makeL(int n, int a[]){
head = NULL; // 空のリストに初期化
for(int i = 0; i < n; i++){
Node *newnode = createN(a[i]);
// 頭がNULL、または先頭に入れるべき場合
if (head == NULL || a[i] < head->val){
newnode->next = head;
head = newnode;
} else {
// 挿入位置を探す
Node *p = head;
while(p->next != NULL && p->next->val < a[i]){
p = p->next;
}
newnode->next = p->next;
p->next = newnode;
}
}
}
int main(void){
int i, n;
int *a;
a
= (int*)malloc(sizeof(int) * n
); for(i = 0; i < n; i++){
}
makeL(n, a); // ソートされたリストを作る
printL(); // 出力
freeL(); // メモリ解放
free(a
); // 配列のメモリも忘れずに解放
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IG5vZGUgewogICAgaW50IHZhbDsKICAgIHN0cnVjdCBub2RlICpuZXh0Owp9IE5vZGU7CgpOb2RlICpoZWFkID0gTlVMTDsKCk5vZGUqIGNyZWF0ZU4oaW50IHgpewogICAgTm9kZSAqbmV3bm9kZTsKICAgIG5ld25vZGUgPSAoTm9kZSAqKW1hbGxvYyhzaXplb2YoTm9kZSkpOwogICAgbmV3bm9kZS0+dmFsID0geDsKICAgIG5ld25vZGUtPm5leHQgPSBOVUxMOwogICAgcmV0dXJuIG5ld25vZGU7Cn0KCnZvaWQgZnJlZUwoKXsKICAgIE5vZGUgKnA7CiAgICB3aGlsZShoZWFkICE9IE5VTEwpewogICAgICAgIHAgPSBoZWFkLT5uZXh0OwogICAgICAgIGZyZWUoaGVhZCk7CiAgICAgICAgaGVhZCA9IHA7CiAgICB9Cn0KCnZvaWQgcHJpbnRMKCl7CiAgICBOb2RlICpwID0gaGVhZDsKICAgIHdoaWxlKHAgIT0gTlVMTCl7CiAgICAgICAgcHJpbnRmKCIlZCAiLCBwLT52YWwpOwogICAgICAgIHAgPSBwLT5uZXh0OwogICAgfQogICAgcHJpbnRmKCJcbiIpOwp9Cgp2b2lkIG1ha2VMKGludCBuLCBpbnQgYVtdKXsKICAgIGhlYWQgPSBOVUxMOyAvLyDnqbrjga7jg6rjgrnjg4jjgavliJ3mnJ/ljJYKCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKICAgICAgICBOb2RlICpuZXdub2RlID0gY3JlYXRlTihhW2ldKTsKCiAgICAgICAgLy8g6aCt44GMTlVMTOOAgeOBvuOBn+OBr+WFiOmgreOBq+WFpeOCjOOCi+OBueOBjeWgtOWQiAogICAgICAgIGlmIChoZWFkID09IE5VTEwgfHwgYVtpXSA8IGhlYWQtPnZhbCl7CiAgICAgICAgICAgIG5ld25vZGUtPm5leHQgPSBoZWFkOwogICAgICAgICAgICBoZWFkID0gbmV3bm9kZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyDmjL/lhaXkvY3nva7jgpLmjqLjgZkKICAgICAgICAgICAgTm9kZSAqcCA9IGhlYWQ7CiAgICAgICAgICAgIHdoaWxlKHAtPm5leHQgIT0gTlVMTCAmJiBwLT5uZXh0LT52YWwgPCBhW2ldKXsKICAgICAgICAgICAgICAgIHAgPSBwLT5uZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5ld25vZGUtPm5leHQgPSBwLT5uZXh0OwogICAgICAgICAgICBwLT5uZXh0ID0gbmV3bm9kZTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKHZvaWQpewogICAgaW50IGksIG47CiAgICBpbnQgKmE7CiAgICBzY2FuZigiJWQiLCAmbik7CiAgICBhID0gKGludCopbWFsbG9jKHNpemVvZihpbnQpICogbik7CiAgICBmb3IoaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgIHNjYW5mKCIlZCIsICZhW2ldKTsKICAgIH0KCiAgICBtYWtlTChuLCBhKTsgICAvLyDjgr3jg7zjg4jjgZXjgozjgZ/jg6rjgrnjg4jjgpLkvZzjgosKICAgIHByaW50TCgpOyAgICAgIC8vIOWHuuWKmwogICAgZnJlZUwoKTsgICAgICAgLy8g44Oh44Oi44Oq6Kej5pS+CiAgICBmcmVlKGEpOyAgICAgICAvLyDphY3liJfjga7jg6Hjg6Ljg6rjgoLlv5jjgozjgZrjgavop6PmlL4KCiAgICByZXR1cm4gMDsKfQoK