- #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==