#include <stdio.h>
#include <stdlib.h>

typedef struct linklist {
    int val;
    struct linklist *next;
} MyLinkedList;

void dump_list(MyLinkedList *head)
{
    MyLinkedList *node;
    
    for (node = head; node != NULL; node = node->next) {
        printf("%d%s", node->val, node->next ? " -> " : "\n");
    }
}

void AddAtHead(MyLinkedList* obj, int val)
{
    MyLinkedList* tem = malloc(sizeof(MyLinkedList));
    // tem->val=obj->val;
    // tem->next=obj->next;
    // obj->val=val;
    // obj->next=tem;
    tem->val=val;
    tem->next=obj;
    obj=tem;
    
    printf("obj in AddAtHead():\n");
    dump_list(obj);    /* 1 -> 2 -> 7 */
    
    printf("tem in AddAtHead():\n");
    dump_list(obj);    /* 1 -> 2 -> 7 */
}

int main() 
{
    MyLinkedList node1, node2;
    MyLinkedList *head;
    
    node1.val = 2;
    node1.next = &node2;
    
    node2.val = 7;
    node2.next = NULL;
    
    head = &node1;

    printf("Initial list:\n");
    dump_list(head);    /* 2 -> 7 */

    AddAtHead(head, 1); /* head still points to node1 */
    printf("AddAtHead() called:\n");
    dump_list(head);    /* 2 -> 7 */

    return 0;
}