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

struct list {
	int data;
	struct list *next;
} List, *PList;

struct list * list_insert (int data, struct list * root)
{
	struct list *p = (struct list *) malloc(sizeof (struct list));
	p->data = data;
	p->next = NULL;
	if (!root)
		root = p;
	else
	{
		struct list *iter = root;
		while (iter->next)
			iter = iter->next;
		iter->next = p;
	}
	return root;
}

void list_print (struct list * root)
{
	while (root)
	{
		printf ("%d\n", root->data);
		root = root->next;
	}
}

void list_destroy (struct list * root)
{
	if (root != NULL)
	{
		list_destroy (root->next);
		free (root);
	}
}

int main (int argc, char *argv[])
{
	struct list *root = NULL;
	root = list_insert (1, root);
	root = list_insert (2, root);
	root = list_insert (3, root);

	list_print(root);
	list_destroy (root);
	list_print(root);

	int p;
	scanf("%d", &p);
	return 0;
}