#include <stdio.h>
#include <stdlib.h>
//第5回:線形リスト(Linked List)
//配列と違って、データを増やしたり減らしたりが簡単
//ノード(値+次のノードへのポインタ)をつないでいく構造
//ノードの構造体(val と next の2つで1セット)
typedef struct node{
int val;
struct node *next;
}Node;
//head はリストの先頭を指す(絶対に見失わないこと)
Node *head = NULL;
//ノードを1個作る(値xで初期化)
Node* createN(int x){
Node
*p
= (Node
*)malloc(sizeof(Node
)); p->val = x;
p->next = NULL; //末尾なので next はNULL
return p;
}
//n個の値でリストを初期化(演習1)
void initL(int n){
int x;
head = createN(x); //最初のノード
Node *p = head;
for(int i = 1; i < n; i++){
p->next = createN(x); //次のノードをつなぐ
p = p->next; //ポインタを進める
}
}
//リストを解放(freeL)
void freeL(){
Node *p;
while(head != NULL){
p = head->next; //次を覚えておく
head = p; //次へ進む
}
}
//ノード1個を出力(NULLならNULLと出す)
void printN(Node *a){
if(a
== NULL
) printf("NULL\n"); }
//リスト全体を出力(先頭から順に)
void printL(){
Node *p = head;
while(p != NULL){
p = p->next;
}
}
//n番目のノードを返す(1番目がhead)
Node* getN(int n){
Node *p = head;
for(int i = 1; i < n; i++){
p = p->next;
}
return p;
}
//要素数を数える(countL)
int countL(){
int ret = 0;
Node *p = head;
while(p != NULL){
ret++;
p = p->next;
}
return ret;
}
//値xを探す(searchX)→ 見つかったノード or NULL
Node* searchX(int x){
for(Node *p = head; p != NULL; p = p->next){
if(p->val == x) return p;
}
return NULL;
}
//先頭に挿入(insHead)
void insHead(int x){
Node *p = createN(x);
p->next = head; //今の先頭を後ろにつなぐ
head = p; //新しい先頭
}
//先頭を削除(delHead)
void delHead(){
Node *p = head;
head = head->next; //次を先頭にする
}
//末尾に挿入(insTail)
void insTail(int x){
Node *p = head;
while(p->next != NULL){
p = p->next;
}
p->next = createN(x);
}
//末尾を削除(delTail)
void delTail(){
Node *p = head;
while(p->next->next != NULL){
p = p->next;
}
p->next = NULL;
}
//中間に挿入(n番目の後に挿入)
void insMiddle(int n, int x){
Node *p = head;
for(int i = 1; i < n; i++){
p = p->next;
}
Node *q = createN(x);
q->next = p->next;
p->next = q;
}
//中間を削除(n番目を削除)
void delMiddle(int n){
Node *p = head;
for(int i = 1; i < n-1; i++){
p = p->next;
}
Node *q = p->next;
p->next = q->next;
}
int main(void){
int n;
initL(n); //n個で初期化
printL(); //確認用
//ここに好きな操作を追加して試す
//insHead(100);
//insTail(200);
//insMiddle(2, 999);
//delHead();
//delTail();
//delMiddle(3);
printL();
freeL();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8v56ysNeWbnu+8mue3muW9ouODquOCueODiO+8iExpbmtlZCBMaXN077yJCi8v6YWN5YiX44Go6YGV44Gj44Gm44CB44OH44O844K/44KS5aKX44KE44GX44Gf44KK5rib44KJ44GX44Gf44KK44GM57Ch5Y2YCi8v44OO44O844OJ77yI5YCk77yL5qyh44Gu44OO44O844OJ44G444Gu44Od44Kk44Oz44K/77yJ44KS44Gk44Gq44GE44Gn44GE44GP5qeL6YCgCgovL+ODjuODvOODieOBruani+mAoOS9k++8iHZhbCDjgaggbmV4dCDjga4y44Gk44GnMeOCu+ODg+ODiO+8iQp0eXBlZGVmIHN0cnVjdCBub2RlewogICAgaW50IHZhbDsKICAgIHN0cnVjdCBub2RlICpuZXh0Owp9Tm9kZTsKCi8vaGVhZCDjga/jg6rjgrnjg4jjga7lhYjpoK3jgpLmjIfjgZnvvIjntbblr77jgavopovlpLHjgo/jgarjgYTjgZPjgajvvIkKTm9kZSAqaGVhZCA9IE5VTEw7CgovL+ODjuODvOODieOCkjHlgIvkvZzjgovvvIjlgKR444Gn5Yid5pyf5YyW77yJCk5vZGUqIGNyZWF0ZU4oaW50IHgpewogICAgTm9kZSAqcCA9IChOb2RlKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKICAgIHAtPnZhbCA9IHg7CiAgICBwLT5uZXh0ID0gTlVMTDsgLy/mnKvlsL7jgarjga7jgacgbmV4dCDjga9OVUxMCiAgICByZXR1cm4gcDsKfQoKLy9u5YCL44Gu5YCk44Gn44Oq44K544OI44KS5Yid5pyf5YyW77yI5ryU57+SMe+8iQp2b2lkIGluaXRMKGludCBuKXsKICAgIGludCB4OwogICAgc2NhbmYoIiVkIiwgJngpOwogICAgaGVhZCA9IGNyZWF0ZU4oeCk7IC8v5pyA5Yid44Gu44OO44O844OJCiAgICBOb2RlICpwID0gaGVhZDsKCiAgICBmb3IoaW50IGkgPSAxOyBpIDwgbjsgaSsrKXsKICAgICAgICBzY2FuZigiJWQiLCAmeCk7CiAgICAgICAgcC0+bmV4dCA9IGNyZWF0ZU4oeCk7IC8v5qyh44Gu44OO44O844OJ44KS44Gk44Gq44GQCiAgICAgICAgcCA9IHAtPm5leHQ7IC8v44Od44Kk44Oz44K/44KS6YCy44KB44KLCiAgICB9Cn0KCi8v44Oq44K544OI44KS6Kej5pS+77yIZnJlZUzvvIkKdm9pZCBmcmVlTCgpewogICAgTm9kZSAqcDsKICAgIHdoaWxlKGhlYWQgIT0gTlVMTCl7CiAgICAgICAgcCA9IGhlYWQtPm5leHQ7IC8v5qyh44KS6Kaa44GI44Gm44GK44GPCiAgICAgICAgZnJlZShoZWFkKTsgLy/ku4rjga7jg47jg7zjg4njgpLop6PmlL4KICAgICAgICBoZWFkID0gcDsgLy/mrKHjgbjpgLLjgoAKICAgIH0KfQoKLy/jg47jg7zjg4kx5YCL44KS5Ye65Yqb77yITlVMTOOBquOCiU5VTEzjgajlh7rjgZnvvIkKdm9pZCBwcmludE4oTm9kZSAqYSl7CiAgICBpZihhID09IE5VTEwpIHByaW50ZigiTlVMTFxuIik7CiAgICBlbHNlIHByaW50ZigiJWRcbiIsIGEtPnZhbCk7Cn0KCi8v44Oq44K544OI5YWo5L2T44KS5Ye65Yqb77yI5YWI6aCt44GL44KJ6aCG44Gr77yJCnZvaWQgcHJpbnRMKCl7CiAgICBOb2RlICpwID0gaGVhZDsKICAgIHdoaWxlKHAgIT0gTlVMTCl7CiAgICAgICAgcHJpbnRmKCIlZCAiLCBwLT52YWwpOwogICAgICAgIHAgPSBwLT5uZXh0OwogICAgfQogICAgcHJpbnRmKCJcbiIpOwp9CgovL27nlarnm67jga7jg47jg7zjg4njgpLov5TjgZnvvIgx55Wq55uu44GMaGVhZO+8iQpOb2RlKiBnZXROKGludCBuKXsKICAgIE5vZGUgKnAgPSBoZWFkOwogICAgZm9yKGludCBpID0gMTsgaSA8IG47IGkrKyl7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICB9CiAgICByZXR1cm4gcDsKfQoKLy/opoHntKDmlbDjgpLmlbDjgYjjgovvvIhjb3VudEzvvIkKaW50IGNvdW50TCgpewogICAgaW50IHJldCA9IDA7CiAgICBOb2RlICpwID0gaGVhZDsKICAgIHdoaWxlKHAgIT0gTlVMTCl7CiAgICAgICAgcmV0Kys7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICB9CiAgICByZXR1cm4gcmV0Owp9CgovL+WApHjjgpLmjqLjgZnvvIhzZWFyY2hY77yJ4oaSIOimi+OBpOOBi+OBo+OBn+ODjuODvOODiSBvciBOVUxMCk5vZGUqIHNlYXJjaFgoaW50IHgpewogICAgZm9yKE5vZGUgKnAgPSBoZWFkOyBwICE9IE5VTEw7IHAgPSBwLT5uZXh0KXsKICAgICAgICBpZihwLT52YWwgPT0geCkgcmV0dXJuIHA7CiAgICB9CiAgICByZXR1cm4gTlVMTDsKfQoKLy/lhYjpoK3jgavmjL/lhaXvvIhpbnNIZWFk77yJCnZvaWQgaW5zSGVhZChpbnQgeCl7CiAgICBOb2RlICpwID0gY3JlYXRlTih4KTsKICAgIHAtPm5leHQgPSBoZWFkOyAvL+S7iuOBruWFiOmgreOCkuW+jOOCjeOBq+OBpOOBquOBkAogICAgaGVhZCA9IHA7IC8v5paw44GX44GE5YWI6aCtCn0KCi8v5YWI6aCt44KS5YmK6Zmk77yIZGVsSGVhZO+8iQp2b2lkIGRlbEhlYWQoKXsKICAgIE5vZGUgKnAgPSBoZWFkOwogICAgaGVhZCA9IGhlYWQtPm5leHQ7IC8v5qyh44KS5YWI6aCt44Gr44GZ44KLCiAgICBmcmVlKHApOwp9CgovL+acq+WwvuOBq+aMv+WFpe+8iGluc1RhaWzvvIkKdm9pZCBpbnNUYWlsKGludCB4KXsKICAgIE5vZGUgKnAgPSBoZWFkOwogICAgd2hpbGUocC0+bmV4dCAhPSBOVUxMKXsKICAgICAgICBwID0gcC0+bmV4dDsKICAgIH0KICAgIHAtPm5leHQgPSBjcmVhdGVOKHgpOwp9CgovL+acq+WwvuOCkuWJiumZpO+8iGRlbFRhaWzvvIkKdm9pZCBkZWxUYWlsKCl7CiAgICBOb2RlICpwID0gaGVhZDsKICAgIHdoaWxlKHAtPm5leHQtPm5leHQgIT0gTlVMTCl7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICB9CiAgICBmcmVlKHAtPm5leHQpOwogICAgcC0+bmV4dCA9IE5VTEw7Cn0KCi8v5Lit6ZaT44Gr5oy/5YWl77yIbueVquebruOBruW+jOOBq+aMv+WFpe+8iQp2b2lkIGluc01pZGRsZShpbnQgbiwgaW50IHgpewogICAgTm9kZSAqcCA9IGhlYWQ7CiAgICBmb3IoaW50IGkgPSAxOyBpIDwgbjsgaSsrKXsKICAgICAgICBwID0gcC0+bmV4dDsKICAgIH0KICAgIE5vZGUgKnEgPSBjcmVhdGVOKHgpOwogICAgcS0+bmV4dCA9IHAtPm5leHQ7CiAgICBwLT5uZXh0ID0gcTsKfQoKLy/kuK3plpPjgpLliYrpmaTvvIhu55Wq55uu44KS5YmK6Zmk77yJCnZvaWQgZGVsTWlkZGxlKGludCBuKXsKICAgIE5vZGUgKnAgPSBoZWFkOwogICAgZm9yKGludCBpID0gMTsgaSA8IG4tMTsgaSsrKXsKICAgICAgICBwID0gcC0+bmV4dDsKICAgIH0KICAgIE5vZGUgKnEgPSBwLT5uZXh0OwogICAgcC0+bmV4dCA9IHEtPm5leHQ7CiAgICBmcmVlKHEpOwp9CgppbnQgbWFpbih2b2lkKXsKICAgIGludCBuOwogICAgc2NhbmYoIiVkIiwgJm4pOwoKICAgIGluaXRMKG4pOyAvL27lgIvjgafliJ3mnJ/ljJYKICAgIHByaW50TCgpOyAvL+eiuuiqjeeUqAoKICAgIC8v44GT44GT44Gr5aW944GN44Gq5pON5L2c44KS6L+95Yqg44GX44Gm6Kmm44GZCiAgICAvL2luc0hlYWQoMTAwKTsKICAgIC8vaW5zVGFpbCgyMDApOwogICAgLy9pbnNNaWRkbGUoMiwgOTk5KTsKICAgIC8vZGVsSGVhZCgpOwogICAgLy9kZWxUYWlsKCk7CiAgICAvL2RlbE1pZGRsZSgzKTsKCiAgICBwcmludEwoKTsKCiAgICBmcmVlTCgpOwogICAgcmV0dXJuIDA7Cn0K