A structure is just a block of memory. In a structure you can have a pointer to another structure.
Here's some example code. I haven't test it, but I thought it's correct.
Code:
/* Assume : */
struct node
{
int data;
struct node *next;
};
/* Now you could use this as */
struct node *node1, *node2, *node3;
/* That were pointers, now you need to allocate memory for them */
node1 = (struct node *) malloc (sizeof (struct node));
node2 = (struct node *) malloc (sizeof (struct node));
node3 = (struct node *) malloc (sizeof (struct node));
/* If one of the pointers has value NULL, then there is a memory problem */
if (node1 == NULL || node2 == NULL || node3 == NULL)
return ERRORVALUE;
/* Let node1 point to node2 */
node1->next = node2;
/* Let node2 point to node3 */
node2->next = node3;
/* Now remove node2 from the list, so node1 points directly to node3 */
node1->next = node2;
/* Don't forget to free the memory! */
free (node2);
/* Ofcourse at the end you need to free all memory */
free (node1);
free (node3);
In this example there were 3 nodes. But linked lists are usually used in situations where you need those nodes, but you don't know how many when beginning. So usually you let the program remember the address of the first node, i.e. having a pointer to the beginning of the list and then adding nodes.
When walking through the list, you use a different pointer-variable, you should NEVER change the pointer which point to the start of the list, since then you will lose that information.