Makefile 
prog.exe : prog.o lista.o
    gcc -o prog.exe prog.o lista.o
prog.o : prog.c lista.h
    gcc -c prog.c
lista.o : lista.h lista.c
    gcc -c lista.c
 lista.h 
#ifndef _LISTA
#define _LISTA
typedef struct sInteiro
  {
    int valor;
    struct sInteiro * seg;
  } Nodo, *Lista;
Lista inserir( int v, Lista l );
void listar( Lista l );
void listar_inv( Lista l );
Lista procurar( int v, Lista l );
int conta_elems( Lista l );
#endif
 lista.c 
#include "lista.h"
#include <stdio.h>
Lista inserir( int v, Lista l )
{
  Lista novo;
  novo = (Lista) malloc(sizeof(Nodo));
  novo->valor = v;
  novo->seg = l;
  return novo;
}
void listar( Lista l )
{
  if(l)
  {
    printf("%d ",l->valor);
    listar(l->seg);
  }
}
Lista inserir_ord( int v, Lista l)
{
  Lista novo;
  if((!l) || (l->valor > v))
  {
    novo = (Lista) malloc(sizeof(Nodo));
    novo->valor = v;
    novo->seg = l;
    return novo;
  }
  else
  {
    l->seg = inserir_ord(v,l->seg);
    return l;
  }
}
 prog.c 
#include <stdio.h>
#include "lista.h"
int main()
{
  Lista li=NULL;
  int i=0;
  while ((i+=3) < 100)
    li = inserir(i,li);
  listar(li);
  return 0;
}