#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
struct Node *head = NULL;
/* Function Prototypes */
void insertEnd(int);
void insertBeginning(int);
void insertAtPosition(int, int);
void display();
/* Insert at end */
void insertEnd(int value) {
struct Node
*newNode
= malloc(sizeof(struct Node
)); newNode->data = value;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
return;
}
struct Node *temp = head;
while (temp->next != NULL)
temp = temp->next;
temp->next = newNode;
}
/* Insert at beginning */
void insertBeginning(int value) {
struct Node
*newNode
= malloc(sizeof(struct Node
)); newNode->data = value;
newNode->next = head;
head = newNode;
}
/* Insert at any position */
void insertAtPosition(int value, int pos) {
if (pos < 1) {
return;
}
if (pos == 1) {
insertBeginning(value);
return;
}
struct Node *temp = head;
for (int i = 1; i < pos - 1 && temp != NULL; i++)
temp = temp->next;
if (temp == NULL) {
return;
}
struct Node
*newNode
= malloc(sizeof(struct Node
)); newNode->data = value;
newNode->next = temp->next;
temp->next = newNode;
}
/* Display list */
void display() {
struct Node *temp = head;
while (temp != NULL) {
temp = temp->next;
}
}
int main() {
int choice, value, pos;
while (1) {
printf("2. Insert Beginning\n"); printf("3. Insert Position\n"); printf("Enter your choice: ");
switch (choice) {
case 1:
insertEnd(value);
break;
case 2:
insertBeginning(value);
break;
case 3:
insertAtPosition(value, pos);
break;
case 4:
display();
break;
case 0:
default:
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBOb2RlIHsKICAgIGludCBkYXRhOwogICAgc3RydWN0IE5vZGUgKm5leHQ7Cn07CgpzdHJ1Y3QgTm9kZSAqaGVhZCA9IE5VTEw7CgovKiBGdW5jdGlvbiBQcm90b3R5cGVzICovCnZvaWQgaW5zZXJ0RW5kKGludCk7CnZvaWQgaW5zZXJ0QmVnaW5uaW5nKGludCk7CnZvaWQgaW5zZXJ0QXRQb3NpdGlvbihpbnQsIGludCk7CnZvaWQgZGlzcGxheSgpOwoKLyogSW5zZXJ0IGF0IGVuZCAqLwp2b2lkIGluc2VydEVuZChpbnQgdmFsdWUpIHsKICAgIHN0cnVjdCBOb2RlICpuZXdOb2RlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgTm9kZSkpOwogICAgbmV3Tm9kZS0+ZGF0YSA9IHZhbHVlOwogICAgbmV3Tm9kZS0+bmV4dCA9IE5VTEw7CgogICAgaWYgKGhlYWQgPT0gTlVMTCkgewogICAgICAgIGhlYWQgPSBuZXdOb2RlOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzdHJ1Y3QgTm9kZSAqdGVtcCA9IGhlYWQ7CiAgICB3aGlsZSAodGVtcC0+bmV4dCAhPSBOVUxMKQogICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0OwoKICAgIHRlbXAtPm5leHQgPSBuZXdOb2RlOwp9CgovKiBJbnNlcnQgYXQgYmVnaW5uaW5nICovCnZvaWQgaW5zZXJ0QmVnaW5uaW5nKGludCB2YWx1ZSkgewogICAgc3RydWN0IE5vZGUgKm5ld05vZGUgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBOb2RlKSk7CiAgICBuZXdOb2RlLT5kYXRhID0gdmFsdWU7CiAgICBuZXdOb2RlLT5uZXh0ID0gaGVhZDsKICAgIGhlYWQgPSBuZXdOb2RlOwp9CgovKiBJbnNlcnQgYXQgYW55IHBvc2l0aW9uICovCnZvaWQgaW5zZXJ0QXRQb3NpdGlvbihpbnQgdmFsdWUsIGludCBwb3MpIHsKICAgIGlmIChwb3MgPCAxKSB7CiAgICAgICAgcHJpbnRmKCJJbnZhbGlkIHBvc2l0aW9uXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHBvcyA9PSAxKSB7CiAgICAgICAgaW5zZXJ0QmVnaW5uaW5nKHZhbHVlKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc3RydWN0IE5vZGUgKnRlbXAgPSBoZWFkOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBwb3MgLSAxICYmIHRlbXAgIT0gTlVMTDsgaSsrKQogICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0OwoKICAgIGlmICh0ZW1wID09IE5VTEwpIHsKICAgICAgICBwcmludGYoIkludmFsaWQgcG9zaXRpb25cbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzdHJ1Y3QgTm9kZSAqbmV3Tm9kZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IE5vZGUpKTsKICAgIG5ld05vZGUtPmRhdGEgPSB2YWx1ZTsKICAgIG5ld05vZGUtPm5leHQgPSB0ZW1wLT5uZXh0OwogICAgdGVtcC0+bmV4dCA9IG5ld05vZGU7Cn0KCi8qIERpc3BsYXkgbGlzdCAqLwp2b2lkIGRpc3BsYXkoKSB7CiAgICBzdHJ1Y3QgTm9kZSAqdGVtcCA9IGhlYWQ7CiAgICB3aGlsZSAodGVtcCAhPSBOVUxMKSB7CiAgICAgICAgcHJpbnRmKCIlZCAtPiAiLCB0ZW1wLT5kYXRhKTsKICAgICAgICB0ZW1wID0gdGVtcC0+bmV4dDsKICAgIH0KICAgIHByaW50ZigiTlVMTFxuIik7Cn0KCmludCBtYWluKCkgewogICAgaW50IGNob2ljZSwgdmFsdWUsIHBvczsKCiAgICB3aGlsZSAoMSkgewogICAgICAgIHByaW50ZigiXG4xLiBJbnNlcnQgRW5kXG4iKTsKICAgICAgICBwcmludGYoIjIuIEluc2VydCBCZWdpbm5pbmdcbiIpOwogICAgICAgIHByaW50ZigiMy4gSW5zZXJ0IFBvc2l0aW9uXG4iKTsKICAgICAgICBwcmludGYoIjQuIERpc3BsYXlcbiIpOwogICAgICAgIHByaW50ZigiMC4gRXhpdFxuIik7CiAgICAgICAgcHJpbnRmKCJFbnRlciB5b3VyIGNob2ljZTogIik7CiAgICAgICAgc2NhbmYoIiVkIiwgJmNob2ljZSk7CgogICAgICAgIHN3aXRjaCAoY2hvaWNlKSB7CiAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgIHByaW50ZigiRW50ZXIgdmFsdWU6ICIpOwogICAgICAgICAgICAgICAgc2NhbmYoIiVkIiwgJnZhbHVlKTsKICAgICAgICAgICAgICAgIGluc2VydEVuZCh2YWx1ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgcHJpbnRmKCJFbnRlciB2YWx1ZTogIik7CiAgICAgICAgICAgICAgICBzY2FuZigiJWQiLCAmdmFsdWUpOwogICAgICAgICAgICAgICAgaW5zZXJ0QmVnaW5uaW5nKHZhbHVlKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICBwcmludGYoIkVudGVyIHZhbHVlOiAiKTsKICAgICAgICAgICAgICAgIHNjYW5mKCIlZCIsICZ2YWx1ZSk7CiAgICAgICAgICAgICAgICBwcmludGYoIkVudGVyIHBvc2l0aW9uOiAiKTsKICAgICAgICAgICAgICAgIHNjYW5mKCIlZCIsICZwb3MpOwogICAgICAgICAgICAgICAgaW5zZXJ0QXRQb3NpdGlvbih2YWx1ZSwgcG9zKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICBkaXNwbGF5KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgZXhpdCgwKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCBjaG9pY2VcbiIpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9Cg==