#include <stdio.h>
#include <stdlib.h>
struct Node
{
int data;
struct Node *Next;
struct Node *Prev;
};
struct Node *createNode(int data)
{
struct Node
*newNode
= (struct Node
*)malloc(sizeof(struct Node
)); newNode->data = data;
newNode->Next = NULL;
newNode->Prev = NULL;
return newNode;
}
void printList(struct Node *head)
{
if (head == NULL)
{
printf("The List is empty \n"); return;
}
else
{
struct Node *temp = head;
while (temp != NULL)
{
temp = temp->Next;
}
}
}
struct Node *insertAtBeg(struct Node *head, int data)
{
struct Node *newNode = createNode(data);
struct Node *temp = head;
if (head == NULL)
{
head = newNode;
return newNode;
}
else
{
newNode->Next = temp;
temp->Prev = newNode;
head = newNode;
return newNode;
}
}
struct Node* insertAfter(struct Node *head, int data, int target)
{
struct Node* newNode = createNode(data);
struct Node* temp;
struct Node* ptr = head;
if (head == NULL)
{
return newNode;
}
else
{
while (ptr->data != target && ptr != NULL)
{
ptr = ptr->Next;
}
temp = ptr->Next;
ptr->Next = newNode;
newNode->Prev = ptr;
if (temp != NULL)
{
newNode->Next = temp;
temp->Prev = newNode;
}
}
return head;
}
struct Node* insertAtEnd(struct Node* head, int data){
struct Node* newNode = createNode(data);
struct Node* ptr = head;
if(head==NULL){
head = newNode;
return newNode;
}
while(ptr->Next != NULL){
ptr = ptr->Next;
}
ptr->Next = newNode;
newNode->Next = NULL;
newNode->Prev = ptr;
return head;
}
struct Node* deleteFromEnd(struct Node* head){
if(head == NULL){
return head;
}
struct Node* ptr = head;
while(ptr->Next != NULL){
ptr = ptr->Next;
}
struct Node* temp = ptr->Prev;
temp->Next = NULL;
return head;
}
int main()
{
struct Node *head = NULL;
head = createNode(90);
printList(head);
head = insertAtBeg(head, 45);
printList(head);
head = insertAfter(head, 78, 90);
printList(head);
head = insertAtEnd(head, 25);
printList(head);
head = deleteFromEnd(head);
printList(head);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBOb2RlCnsKICAgIGludCBkYXRhOwogICAgc3RydWN0IE5vZGUgKk5leHQ7CiAgICBzdHJ1Y3QgTm9kZSAqUHJldjsKfTsKCnN0cnVjdCBOb2RlICpjcmVhdGVOb2RlKGludCBkYXRhKQp7CiAgICBzdHJ1Y3QgTm9kZSAqbmV3Tm9kZSA9IChzdHJ1Y3QgTm9kZSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IE5vZGUpKTsKICAgIG5ld05vZGUtPmRhdGEgPSBkYXRhOwogICAgbmV3Tm9kZS0+TmV4dCA9IE5VTEw7CiAgICBuZXdOb2RlLT5QcmV2ID0gTlVMTDsKICAgIHJldHVybiBuZXdOb2RlOwp9Cgp2b2lkIHByaW50TGlzdChzdHJ1Y3QgTm9kZSAqaGVhZCkKewogICAgaWYgKGhlYWQgPT0gTlVMTCkKICAgIHsKICAgICAgICBwcmludGYoIlRoZSBMaXN0IGlzIGVtcHR5IFxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHN0cnVjdCBOb2RlICp0ZW1wID0gaGVhZDsKICAgICAgICB3aGlsZSAodGVtcCAhPSBOVUxMKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCIgJWQgLT4iLCB0ZW1wLT5kYXRhKTsKICAgICAgICAgICAgdGVtcCA9IHRlbXAtPk5leHQ7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiIE5VTExcbiIpOwogICAgfQp9CgpzdHJ1Y3QgTm9kZSAqaW5zZXJ0QXRCZWcoc3RydWN0IE5vZGUgKmhlYWQsIGludCBkYXRhKQp7CiAgICBzdHJ1Y3QgTm9kZSAqbmV3Tm9kZSA9IGNyZWF0ZU5vZGUoZGF0YSk7CiAgICBzdHJ1Y3QgTm9kZSAqdGVtcCA9IGhlYWQ7CgogICAgaWYgKGhlYWQgPT0gTlVMTCkKICAgIHsKICAgICAgICBoZWFkID0gbmV3Tm9kZTsKICAgICAgICByZXR1cm4gbmV3Tm9kZTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBuZXdOb2RlLT5OZXh0ID0gdGVtcDsKICAgICAgICB0ZW1wLT5QcmV2ID0gbmV3Tm9kZTsKICAgICAgICBoZWFkID0gbmV3Tm9kZTsKICAgICAgICByZXR1cm4gbmV3Tm9kZTsKICAgIH0KfQoKc3RydWN0IE5vZGUqIGluc2VydEFmdGVyKHN0cnVjdCBOb2RlICpoZWFkLCBpbnQgZGF0YSwgaW50IHRhcmdldCkKewogICAgc3RydWN0IE5vZGUqIG5ld05vZGUgPSBjcmVhdGVOb2RlKGRhdGEpOwogICAgc3RydWN0IE5vZGUqIHRlbXA7CiAgICBzdHJ1Y3QgTm9kZSogcHRyID0gaGVhZDsKCiAgICBpZiAoaGVhZCA9PSBOVUxMKQogICAgewogICAgICAgIHByaW50ZigiVGhlIGxpc3QgaXMgRW1wdHkiKTsKICAgICAgICByZXR1cm4gbmV3Tm9kZTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICB3aGlsZSAocHRyLT5kYXRhICE9IHRhcmdldCAmJiBwdHIgIT0gTlVMTCkKICAgICAgICB7CiAgICAgICAgICAgIHB0ciA9IHB0ci0+TmV4dDsKICAgICAgICB9CiAgICAgICAgdGVtcCA9IHB0ci0+TmV4dDsKICAgICAgICBwdHItPk5leHQgPSBuZXdOb2RlOwogICAgICAgIG5ld05vZGUtPlByZXYgPSBwdHI7CgogICAgICAgIGlmICh0ZW1wICE9IE5VTEwpCiAgICAgICAgewogICAgICAgICAgICBuZXdOb2RlLT5OZXh0ID0gdGVtcDsKICAgICAgICAgICAgdGVtcC0+UHJldiA9IG5ld05vZGU7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGhlYWQ7Cn0KCnN0cnVjdCBOb2RlKiBpbnNlcnRBdEVuZChzdHJ1Y3QgTm9kZSogaGVhZCwgaW50IGRhdGEpewogICAgc3RydWN0IE5vZGUqIG5ld05vZGUgPSBjcmVhdGVOb2RlKGRhdGEpOwogICAgc3RydWN0IE5vZGUqIHB0ciA9IGhlYWQ7CiAgICBpZihoZWFkPT1OVUxMKXsKICAgICAgICBoZWFkID0gbmV3Tm9kZTsKICAgICAgICByZXR1cm4gbmV3Tm9kZTsKICAgIH0KICAgIHdoaWxlKHB0ci0+TmV4dCAhPSBOVUxMKXsKICAgICAgICBwdHIgPSBwdHItPk5leHQ7CiAgICB9CiAgICBwdHItPk5leHQgPSBuZXdOb2RlOwogICAgbmV3Tm9kZS0+TmV4dCA9IE5VTEw7CiAgICBuZXdOb2RlLT5QcmV2ID0gcHRyOwogICAgcmV0dXJuIGhlYWQ7Cn0KCnN0cnVjdCBOb2RlKiBkZWxldGVGcm9tRW5kKHN0cnVjdCBOb2RlKiBoZWFkKXsKICAgIGlmKGhlYWQgPT0gTlVMTCl7CiAgICAgICAgcHJpbnRmKCJUaGUgTGlzdCBpcyBlbXB0eSIpOwogICAgICAgIHJldHVybiBoZWFkOwogICAgfQogICAgc3RydWN0IE5vZGUqIHB0ciA9IGhlYWQ7CiAgICB3aGlsZShwdHItPk5leHQgIT0gTlVMTCl7CiAgICAgICAgcHRyID0gcHRyLT5OZXh0OwogICAgfQogICAgc3RydWN0IE5vZGUqIHRlbXAgPSBwdHItPlByZXY7CiAgICB0ZW1wLT5OZXh0ID0gTlVMTDsKICAgIGZyZWUocHRyKTsKICAgIHJldHVybiBoZWFkOwp9CgppbnQgbWFpbigpCnsKICAgIHN0cnVjdCBOb2RlICpoZWFkID0gTlVMTDsKICAgIGhlYWQgPSBjcmVhdGVOb2RlKDkwKTsKICAgIHByaW50TGlzdChoZWFkKTsKICAgIGhlYWQgPSBpbnNlcnRBdEJlZyhoZWFkLCA0NSk7CiAgICBwcmludExpc3QoaGVhZCk7CiAgICBoZWFkID0gaW5zZXJ0QWZ0ZXIoaGVhZCwgNzgsIDkwKTsKICAgIHByaW50TGlzdChoZWFkKTsKICAgIGhlYWQgPSBpbnNlcnRBdEVuZChoZWFkLCAyNSk7CiAgICBwcmludExpc3QoaGVhZCk7CiAgICBoZWFkID0gZGVsZXRlRnJvbUVuZChoZWFkKTsKICAgIHByaW50TGlzdChoZWFkKTsKCiAgICByZXR1cm4gMDsKfQo=