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

struct XXX {
    struct XXX* next;
    int val;
};

struct XXX* create(int val)
{
    struct XXX* data;
    data = (struct XXX*) malloc(sizeof (struct XXX));
    data->next = NULL;
    data->val = val;
    return data;
}

void add_last(struct XXX* data, int val)
{
    while (data->next != NULL) {
        data = data->next;
    }
    data->next = create(val);
}

int main(void)
{
    struct XXX* data;

    data = create(10);
    add_last(data, 20);
    add_last(data, 30);
    printf("%d, %d, %d\n", data->val, data->next->val, data->next->next->val);
    printf("0x%X\n", data);
    printf("0x%X\n", data->next);
    printf("0x%X\n", data->next->next);
    printf("0x%X\n", data->next->next->next);
    return 0;
}