Funkcje do obsługi listy, problem (C)

Witam!

Wyświetla mi błąd, czy ktoś może powiedzieć dlaczego?

#include 

#include 

#include 


int main(int argc, char *argv[])

{

struct lista1k

    {

        void *dane;

        struct lista1k *next;

    };


typedef struct lista1k l1k;


    l1k *dopiszPocz(l1k *pocz, void *nowy)

        {

            l1k *docelowy;

            docelowy = (l1k*)malloc(sizeof (l1k));

            docelowy->dane=nowy;

            docelowy->next=pocz;

            return docelowy;

        };



l1k *szukaj(l1k *pocz, int szukana)

        {

            while (pocz!=NULL)

            {

                if (pocz->dane==szukana)

                return pocz;

                pocz=pocz->next;


            }

            return NULL;

        };


    l1k *usun_element(l1k *pocz, int dn)

        {

            l1k *pom, *pom1=pocz;


            if (pocz->dane==dn)

            {

                pom=pocz;

                pocz=pocz->next;

                delete[] pom;

                return pocz;

            }

            else

            while (pom1->next)

            if (pom1->next->dane==dn)

            {

                pom=pom1->next;

                pom1->next=(pom1->next)->next;

                delete[]pom;

                return pocz;

            }

            else

            pom1=pom1->next;

            else

            return NULL;

        };


  system("PAUSE");

  return 0;

};

Skopany kod, błędy składniowe i logiczne działania kodu. Np. skąd nagle w C operator delete [] i to jeszcze ‘wywołujesz’ go na zwykłym wskaźniku. W funkcjach szukaj modyfikujesz bezpośrednio przez wskaźnik strukturę danych. Chciałeś chyba ominąć pisania nawiasów klamrowych i wyszedł kod błędny składniowo w usun_element. Deklarujesz wszystko w funkcji main co jest niedopuszczalne, w C nie ma zagnieżdżania funkcji. Pewnie jeszcze by się coś znalazło i to tylko w ~60 liniach.