#include <stdio.h>
#include <stdlib.h>
#define SUCCESS 0
#define FAIL -1
#define TRUE 0
#define FALSE -1
#define ALLOCFAIL -2
#define EMPTY -3
typedef struct Node{
struct Node* next;
struct Node* prev;
int data;
} node;
int push(node **head, int datainput){
/* Initialization of new node */
node
* newptr
= (node
*) malloc(sizeof(node
)); if(newptr == NULL){
return ALLOCFAIL;
}
newptr->next = NULL;
newptr->data = datainput;
/* Check for empty list */
if(*head == NULL){
newptr->prev = NULL;
*head = newptr; // change where head is pointing to
return SUCCESS;
}
/* Get to the end of list*/
node* headptr = *head;
while(headptr->next != NULL){
headptr = headptr->next;
}
headptr->next = newptr;
newptr->prev = headptr;
return SUCCESS;
}
int printlist(node* head){
/* Check if valid node or empty list */
if(head == NULL){
return EMPTY;
}
/* Move to first node if not already */
node* firstptr = head;
while(firstptr->prev != NULL){
firstptr = firstptr->prev;
}
/* Print entire list*/
while(firstptr != NULL){
if(firstptr->next != NULL){
printf("%d -> ", firstptr
->data
); }
else{
}
firstptr = firstptr->next;
}
return SUCCESS;
}
int main(void)
{
node *head = NULL; // <-- important initialization
push(&head, 10);
push(&head, 20);
push(&head, 30);
push(&head, 40);
printlist(head);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgU1VDQ0VTUyAwCiNkZWZpbmUgRkFJTCAtMQojZGVmaW5lIFRSVUUgMAojZGVmaW5lIEZBTFNFIC0xCiNkZWZpbmUgQUxMT0NGQUlMIC0yCiNkZWZpbmUgRU1QVFkgLTMKCgp0eXBlZGVmIHN0cnVjdCBOb2RlewogICAgc3RydWN0IE5vZGUqIG5leHQ7CiAgICBzdHJ1Y3QgTm9kZSogcHJldjsKICAgIGludCBkYXRhOwp9IG5vZGU7CgppbnQgcHVzaChub2RlICoqaGVhZCwgaW50IGRhdGFpbnB1dCl7CiAgIC8qIEluaXRpYWxpemF0aW9uIG9mIG5ldyBub2RlICovCiAgIG5vZGUqIG5ld3B0ciA9IChub2RlKikgbWFsbG9jKHNpemVvZihub2RlKSk7ICAgIAogICBpZihuZXdwdHIgPT0gTlVMTCl7CiAgICAgICByZXR1cm4gQUxMT0NGQUlMOwogICB9CiAgIG5ld3B0ci0+bmV4dCA9IE5VTEw7CiAgIG5ld3B0ci0+ZGF0YSA9IGRhdGFpbnB1dDsKCiAgIC8qIENoZWNrIGZvciBlbXB0eSBsaXN0ICovCiAgIGlmKCpoZWFkID09IE5VTEwpewogICAgICAgbmV3cHRyLT5wcmV2ID0gTlVMTDsKICAgICAgICpoZWFkID0gbmV3cHRyOyAvLyBjaGFuZ2Ugd2hlcmUgaGVhZCBpcyBwb2ludGluZyB0bwogICAgICAgcmV0dXJuIFNVQ0NFU1M7CiAgIH0KCiAgIC8qIEdldCB0byB0aGUgZW5kIG9mIGxpc3QqLwogICBub2RlKiBoZWFkcHRyID0gKmhlYWQ7CiAgIHdoaWxlKGhlYWRwdHItPm5leHQgIT0gTlVMTCl7CiAgICAgICBoZWFkcHRyID0gaGVhZHB0ci0+bmV4dDsKICAgfQoKICAgaGVhZHB0ci0+bmV4dCA9IG5ld3B0cjsKICAgbmV3cHRyLT5wcmV2ID0gaGVhZHB0cjsKICAgcmV0dXJuIFNVQ0NFU1M7Cn0KCmludCBwcmludGxpc3Qobm9kZSogaGVhZCl7CiAgICAvKiBDaGVjayBpZiB2YWxpZCBub2RlIG9yIGVtcHR5IGxpc3QgKi8KICAgIGlmKGhlYWQgPT0gTlVMTCl7CiAgICAgICAgcmV0dXJuIEVNUFRZOwogICAgfQoKICAgIC8qIE1vdmUgdG8gZmlyc3Qgbm9kZSBpZiBub3QgYWxyZWFkeSAqLwogICAgbm9kZSogZmlyc3RwdHIgPSBoZWFkOwogICAgd2hpbGUoZmlyc3RwdHItPnByZXYgIT0gTlVMTCl7CiAgICAgICAgZmlyc3RwdHIgPSBmaXJzdHB0ci0+cHJldjsKICAgIH0KCiAgICAvKiBQcmludCBlbnRpcmUgbGlzdCovCiAgICB3aGlsZShmaXJzdHB0ciAhPSBOVUxMKXsKICAgICAgICBpZihmaXJzdHB0ci0+bmV4dCAhPSBOVUxMKXsKICAgICAgICAgICAgcHJpbnRmKCIlZCAtPiAiLCBmaXJzdHB0ci0+ZGF0YSk7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIHByaW50ZigiJWQiLCBmaXJzdHB0ci0+ZGF0YSk7CiAgICAgICAgfQogICAgICAgIGZpcnN0cHRyID0gZmlyc3RwdHItPm5leHQ7CiAgICB9CgoJcHV0cygiIik7CgogICAgcmV0dXJuIFNVQ0NFU1M7Cn0KCgppbnQgbWFpbih2b2lkKQp7Cglub2RlICpoZWFkID0gTlVMTDsgLy8gPC0tIGltcG9ydGFudCBpbml0aWFsaXphdGlvbgoKCXB1c2goJmhlYWQsIDEwKTsKCXB1c2goJmhlYWQsIDIwKTsKCXB1c2goJmhlYWQsIDMwKTsKCXB1c2goJmhlYWQsIDQwKTsKCglwcmludGxpc3QoaGVhZCk7CgoJcmV0dXJuIDA7Cn0KCg==