#include <stdio.h>
#include <stdlib.h>
typedef int DATA;
typedef struct node {
struct node *next;
DATA data;
} NODE;
NODE list_head;
void addNewNodeToHeadLocal(struct node *root, int data, int pos) {
NODE *newNode;
if (root->next == 0 || pos <= 0) {
if ((newNode
= malloc(sizeof(NODE
))) != 0) { newNode->next = root->next;
root->next = newNode;
newNode->data = data;
}
} else {
addNewNodeToHeadLocal(root->next, data, pos - 1);
}
}
void addNewNodeToHead(DATA *data, int pos) {
addNewNodeToHeadLocal(&list_head, (*data)++, pos - 1);
}
void deleteFirstNodeLocal(struct node *root, int pos, int key) {
NODE *prevNode;
if (pos <= 0) {
if (root->next) {
prevNode = root->next;
root->next = prevNode->next;
} else {
printf("%d番目の要素はありません。\n",key
); }
} else {
if (root->next)
deleteFirstNodeLocal(root->next, pos - 1, key);
else
deleteFirstNodeLocal(root, pos - 1, key);
}
}
void deleteFirstNode(int pos,int key) {
deleteFirstNodeLocal(&list_head, pos - 1,key);
}
void showList(void) {
NODE *pos;
pos = list_head.next;
while ( pos != NULL ) {
pos = pos->next;
}
}
int main() {
int key, pos;
DATA value;
value = 1;
list_head.next = NULL;
while (key != 9) {
showList();
printf("1.n番目を追加、2.n番目を削除、9.終了:"); switch (key) {
case 1:
addNewNodeToHead(&value, pos);
break;
case 2:
deleteFirstNode(pos,pos);
break;
default:
break;
}
}
while (list_head.next)
deleteFirstNode(0,0);
return 0;
}
/* end */
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgaW50IERBVEE7Cgp0eXBlZGVmIHN0cnVjdCBub2RlIHsKICBzdHJ1Y3Qgbm9kZSAqbmV4dDsKICBEQVRBIGRhdGE7Cn0gTk9ERTsKCk5PREUgbGlzdF9oZWFkOwoKdm9pZCBhZGROZXdOb2RlVG9IZWFkTG9jYWwoc3RydWN0IG5vZGUgKnJvb3QsIGludCBkYXRhLCBpbnQgcG9zKSB7CiAgTk9ERSAqbmV3Tm9kZTsKICBpZiAocm9vdC0+bmV4dCA9PSAwIHx8IHBvcyA8PSAwKSB7CiAgICBpZiAoKG5ld05vZGUgPSBtYWxsb2Moc2l6ZW9mKE5PREUpKSkgIT0gMCkgewogICAgICBuZXdOb2RlLT5uZXh0ID0gcm9vdC0+bmV4dDsKICAgICAgcm9vdC0+bmV4dCA9IG5ld05vZGU7CiAgICAgIG5ld05vZGUtPmRhdGEgPSBkYXRhOwogICAgfQogIH0gZWxzZSB7CiAgICBhZGROZXdOb2RlVG9IZWFkTG9jYWwocm9vdC0+bmV4dCwgZGF0YSwgcG9zIC0gMSk7CiAgfQp9Cgp2b2lkIGFkZE5ld05vZGVUb0hlYWQoREFUQSAqZGF0YSwgaW50IHBvcykgewogIGFkZE5ld05vZGVUb0hlYWRMb2NhbCgmbGlzdF9oZWFkLCAoKmRhdGEpKyssIHBvcyAtIDEpOwp9Cgp2b2lkIGRlbGV0ZUZpcnN0Tm9kZUxvY2FsKHN0cnVjdCBub2RlICpyb290LCBpbnQgcG9zLCBpbnQga2V5KSB7CiAgTk9ERSAqcHJldk5vZGU7CiAgaWYgKHBvcyA8PSAwKSB7CiAgICBpZiAocm9vdC0+bmV4dCkgewogICAgICBwcmV2Tm9kZSA9IHJvb3QtPm5leHQ7CiAgICAgIHJvb3QtPm5leHQgPSBwcmV2Tm9kZS0+bmV4dDsKICAgICAgZnJlZShwcmV2Tm9kZSk7CiAgICB9IGVsc2UgewogICAgICBwcmludGYoIiVk55Wq55uu44Gu6KaB57Sg44Gv44GC44KK44G+44Gb44KT44CCXG4iLGtleSk7CiAgICB9CiAgfSBlbHNlIHsKICAgIGlmIChyb290LT5uZXh0KQogICAgICBkZWxldGVGaXJzdE5vZGVMb2NhbChyb290LT5uZXh0LCBwb3MgLSAxLCBrZXkpOwogICAgZWxzZQogICAgICBkZWxldGVGaXJzdE5vZGVMb2NhbChyb290LCBwb3MgLSAxLCBrZXkpOwogIH0KfQoKdm9pZCBkZWxldGVGaXJzdE5vZGUoaW50IHBvcyxpbnQga2V5KSB7CiAgZGVsZXRlRmlyc3ROb2RlTG9jYWwoJmxpc3RfaGVhZCwgcG9zIC0gMSxrZXkpOwp9Cgp2b2lkIHNob3dMaXN0KHZvaWQpIHsKICBOT0RFICpwb3M7CiAgcG9zID0gbGlzdF9oZWFkLm5leHQ7CiAgd2hpbGUgKCBwb3MgIT0gTlVMTCApIHsKICAgIHByaW50ZigiJWQgIiwgcG9zLT5kYXRhKTsKICAgIHBvcyA9IHBvcy0+bmV4dDsKICB9CiAgcHJpbnRmKCJcbiIpOwp9CgppbnQgbWFpbigpIHsKICBpbnQga2V5LCBwb3M7IAogIERBVEEgdmFsdWU7CiAgCiAgdmFsdWUgPSAxOwogIGxpc3RfaGVhZC5uZXh0ID0gTlVMTDsKICB3aGlsZSAoa2V5ICE9IDkpIHsKICAgIHNob3dMaXN0KCk7CiAgICBwcmludGYoIu+8ke+8jm7nlarnm67jgpLov73liqDjgIHvvJLvvI5u55Wq55uu44KS5YmK6Zmk44CB77yZ77yO57WC5LqG77yaIik7CiAgICBzY2FuZigiJWQiLCZrZXkpOwogICAgc3dpdGNoIChrZXkpIHsKICAgIGNhc2UgMToKICAgICAgcHJpbnRmKCLkvZXnlarnm67jgpLov73liqDjgZfjgb7jgZnjgYs6Iik7CiAgICAgIHNjYW5mKCIlZCIsJnBvcyk7CiAgICAgIGFkZE5ld05vZGVUb0hlYWQoJnZhbHVlLCBwb3MpOwogICAgICBicmVhazsKICAgIGNhc2UgMjoKICAgICAgcHJpbnRmKCLkvZXnlarnm67jgpLliYrpmaTjgZfjgb7jgZnjgYs6Iik7CiAgICAgIHNjYW5mKCIlZCIsJnBvcyk7CiAgICAgIGRlbGV0ZUZpcnN0Tm9kZShwb3MscG9zKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBicmVhazsKICAgIH0KICB9CiAgd2hpbGUgKGxpc3RfaGVhZC5uZXh0KQogICAgZGVsZXRlRmlyc3ROb2RlKDAsMCk7CiAgcmV0dXJuIDA7Cn0KCi8qIGVuZCAqLw==