#include <stdio.h>
#include <stdlib.h>
// A linked list node
struct node
{
int data;
struct node *next;
};
void push(struct node** head, int new_data)
{
/* 1. allocate node */
struct node
* new_node
= (struct node
*) malloc(sizeof(struct node
));
/* 2. put in the data */
new_node->data = new_data;
/* 3. Make next of new node as head */
new_node->next = *head;
/* 4. move the head to point to the new node */
*head = new_node;
}
/* Given a node prev_node, insert a new node after the given prev_node */
void insertAfter(struct node** prev_node, int new_data)
{
/*1. check if the given prev_node is NULL */
if (*prev_node == NULL)
{
printf("the given previous node cannot be NULL"); return;
}
/* 2. allocate new node */
struct node
* new_node
=(struct node
*) malloc(sizeof(struct node
));
/* 3. put in the data */
new_node->data = new_data;
/* 4. Make next of new node as next of prev_node */
new_node->next = (*prev_node)->next;
/* 5. move the next of prev_node as new_node */
(*prev_node)->next = new_node;
}
void append(struct node** head, int new_data)
{
/* 1. allocate node */
struct node
* new_node
= (struct node
*) malloc(sizeof(struct node
));
struct node *last = *head;
/* 2. put in the data */
new_node->data = new_data;
/* 3. This new node is going to be the last node, so make next of it as NULL*/
new_node->next = NULL;
/* 4. If the Linked List is empty, then make the new node as head */
if (*head == NULL)
{
*head = new_node;
return;
}
/* 5. Else traverse till the last node */
while (last->next != NULL)
last = last->next;
/* 6. Change the next of last node */
last->next = new_node;
return;
}
// This function prints contents of linked list starting from the given node
void printList(struct node *node)
{
while (node != NULL)
{
node = node->next;
}
}
/* Driver program to test above functions*/
int main()
{
/* Start with the empty list */
struct node* head = NULL;
append(&head, 6);
push(&head, 7);
push(&head, 1);
append(&head, 4);
insertAfter(&head->next, 8);
printf("\n Created Linked list is: "); printList(head);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8vIEEgbGlua2VkIGxpc3Qgbm9kZQpzdHJ1Y3Qgbm9kZQp7CiAgICBpbnQgZGF0YTsKICAgIHN0cnVjdCBub2RlICpuZXh0Owp9OwoKCnZvaWQgcHVzaChzdHJ1Y3Qgbm9kZSoqIGhlYWQsIGludCBuZXdfZGF0YSkKewovKiAxLiBhbGxvY2F0ZSBub2RlICovCnN0cnVjdCBub2RlKiBuZXdfbm9kZSA9IChzdHJ1Y3Qgbm9kZSopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKCi8qIDIuIHB1dCBpbiB0aGUgZGF0YSAgKi8KbmV3X25vZGUtPmRhdGEgID0gbmV3X2RhdGE7CgovKiAzLiBNYWtlIG5leHQgb2YgbmV3IG5vZGUgYXMgaGVhZCAqLwpuZXdfbm9kZS0+bmV4dCA9ICpoZWFkOwoKLyogNC4gbW92ZSB0aGUgaGVhZCB0byBwb2ludCB0byB0aGUgbmV3IG5vZGUgKi8KKmhlYWQgICA9IG5ld19ub2RlOwp9CgogLyogR2l2ZW4gYSBub2RlIHByZXZfbm9kZSwgaW5zZXJ0IGEgbmV3IG5vZGUgYWZ0ZXIgdGhlIGdpdmVuIHByZXZfbm9kZSAqLwp2b2lkIGluc2VydEFmdGVyKHN0cnVjdCBub2RlKiogcHJldl9ub2RlLCBpbnQgbmV3X2RhdGEpCnsKLyoxLiBjaGVjayBpZiB0aGUgZ2l2ZW4gcHJldl9ub2RlIGlzIE5VTEwgKi8KaWYgKCpwcmV2X25vZGUgPT0gTlVMTCkKewogIHByaW50ZigidGhlIGdpdmVuIHByZXZpb3VzIG5vZGUgY2Fubm90IGJlIE5VTEwiKTsKICByZXR1cm47Cn0KCi8qIDIuIGFsbG9jYXRlIG5ldyBub2RlICovCnN0cnVjdCBub2RlKiBuZXdfbm9kZSA9KHN0cnVjdCBub2RlKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwoKLyogMy4gcHV0IGluIHRoZSBkYXRhICAqLwpuZXdfbm9kZS0+ZGF0YSAgPSBuZXdfZGF0YTsKCi8qIDQuIE1ha2UgbmV4dCBvZiBuZXcgbm9kZSBhcyBuZXh0IG9mIHByZXZfbm9kZSAqLwpuZXdfbm9kZS0+bmV4dCA9ICgqcHJldl9ub2RlKS0+bmV4dDsKCi8qIDUuIG1vdmUgdGhlIG5leHQgb2YgcHJldl9ub2RlIGFzIG5ld19ub2RlICovCigqcHJldl9ub2RlKS0+bmV4dCA9IG5ld19ub2RlOwp9CgoKdm9pZCBhcHBlbmQoc3RydWN0IG5vZGUqKiBoZWFkLCBpbnQgbmV3X2RhdGEpCnsKLyogMS4gYWxsb2NhdGUgbm9kZSAqLwpzdHJ1Y3Qgbm9kZSogbmV3X25vZGUgPSAoc3RydWN0IG5vZGUqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CgpzdHJ1Y3Qgbm9kZSAqbGFzdCA9ICpoZWFkOyAgCgovKiAyLiBwdXQgaW4gdGhlIGRhdGEgICovCm5ld19ub2RlLT5kYXRhICA9IG5ld19kYXRhOwoKLyogMy4gVGhpcyBuZXcgbm9kZSBpcyBnb2luZyB0byBiZSB0aGUgbGFzdCBub2RlLCBzbyBtYWtlIG5leHQgb2YgaXQgYXMgTlVMTCovCm5ld19ub2RlLT5uZXh0ID0gTlVMTDsKCi8qIDQuIElmIHRoZSBMaW5rZWQgTGlzdCBpcyBlbXB0eSwgdGhlbiBtYWtlIHRoZSBuZXcgbm9kZSBhcyBoZWFkICovCmlmICgqaGVhZCA9PSBOVUxMKQp7CiAgICpoZWFkID0gbmV3X25vZGU7CiAgIHJldHVybjsKfQoKLyogNS4gRWxzZSB0cmF2ZXJzZSB0aWxsIHRoZSBsYXN0IG5vZGUgKi8Kd2hpbGUgKGxhc3QtPm5leHQgIT0gTlVMTCkKICAgIGxhc3QgPSBsYXN0LT5uZXh0OwoKLyogNi4gQ2hhbmdlIHRoZSBuZXh0IG9mIGxhc3Qgbm9kZSAqLwpsYXN0LT5uZXh0ID0gbmV3X25vZGU7CnJldHVybjsKfQoKLy8gVGhpcyBmdW5jdGlvbiBwcmludHMgY29udGVudHMgb2YgbGlua2VkIGxpc3Qgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gbm9kZQp2b2lkIHByaW50TGlzdChzdHJ1Y3Qgbm9kZSAqbm9kZSkKewogIHdoaWxlIChub2RlICE9IE5VTEwpCiAgewogICAgIHByaW50ZigiICVkICIsIG5vZGUtPmRhdGEpOwogICAgIG5vZGUgPSBub2RlLT5uZXh0OwogIH0KfQoKLyogRHJpdmVyIHByb2dyYW0gdG8gdGVzdCBhYm92ZSBmdW5jdGlvbnMqLwppbnQgbWFpbigpCnsKICAgLyogU3RhcnQgd2l0aCB0aGUgZW1wdHkgbGlzdCAqLwogICBzdHJ1Y3Qgbm9kZSogaGVhZCA9IE5VTEw7CgoKICBhcHBlbmQoJmhlYWQsIDYpOwogIHB1c2goJmhlYWQsIDcpOwogIHB1c2goJmhlYWQsIDEpOwogIGFwcGVuZCgmaGVhZCwgNCk7CiAgaW5zZXJ0QWZ0ZXIoJmhlYWQtPm5leHQsIDgpOwogIHByaW50ZigiXG4gQ3JlYXRlZCBMaW5rZWQgbGlzdCBpczogIik7CiAgcHJpbnRMaXN0KGhlYWQpOwoKICBnZXRjaGFyKCk7CiAgcmV0dXJuIDA7Cn0=