#include <stdio.h>
#define NUMNODES 4

typedef char AirportCode[4];

typedef struct NodeTag{
	AirportCode Airport;
	struct NodeTag *Link;
} NodeType;

void main (void)
{
	int a;
	NodeType *L, *N, *Head, *Hold;

	L = (NodeType *)malloc(sizeof(NodeType));

	/* Allocate a list */
	for (a=0; a < NUMNODES; a++) {
		N = (NodeType *)malloc(sizeof(NodeType)); 
		switch (a) {
			case 0: strcpy(L->Airport, "ORD");
				break;
			case 1: strcpy(N->Airport, "MIA");
				L->Link = N;
				Head = N;
				break;
			case 2: strcpy(N->Airport, "MEX");
				Head->Link = N;
				break;
			default:
				break;
		}
	}

	/* Print the list */
	printf("The list before the new node: \n");
	Head = L;
	while (Head != NULL) {
		printf("%s\n", Head->Airport);
		Head = Head->Link;
	}

	/* Allocate a new node */
	N = (NodeType *)malloc(sizeof(NodeType));
	strcpy(N->Airport, "GCM");
	N->Link = NULL;

	/* Find where to put the node */
	Head = L;
	while(strcmp(Head->Airport,"MIA") != 0) 
		Head = Head->Link;

	/* Hold on to left over nodes */
	Hold = Head->Link;

	/* Add the new node */
	Head->Link = N;

	/* connect the list */
	N->Link = Hold;

	/* print the new list */
	printf("The list after the new node is added: \n");
	Head = L;
        while (Head != NULL) {
                printf("%s\n", Head->Airport);
                Head = Head->Link;
        }

	return;
}

