Witam, od jakiegos czasu probuje posortowac liste, jednak w zaden sposob mi nie wychodzi napisalam cos takiego:

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

struct element{
	int liczba_pktow;
	char zadanie[1000];
	struct element *nast;
	struct element *poprz;
};

struct element *utworz(struct element *lista)
{
	lista=NULL;
	return lista;
}

struct element *dodaj(int pkty,struct element *lista,char zad[1000])
{
	int i;
	struct element *el;
	el=(struct element *)malloc(sizeof(struct element));
	el->liczba_pktow=pkty;
	for(i=0;i<1000;i++)
		el->zadanie[i]=zad[i];
	el->nast=lista;
	el->poprz=NULL;
	lista->poprz=el;
	return el;
}

struct element * wczytaj_baze(struct element *lista)
{
	char sciezka[100];
	int a=0,i=0;
	char zad[1000];
	int pkty;
	FILE *plik;
	struct element * pom=lista;
	printf("Podaj sciezke do pliku: ");
	scanf("%s",&sciezka);
	if((plik=fopen(sciezka,"r"))==NULL)
	{
		printf("Nie mozna otworzyc pliku");
		return 1;
	}
	while(fscanf(plik,"%d\n",&pkty)!=EOF)
		{
			fflush(stdin);
			fgets(zad,1000,plik);
			i=0;
			while(zad[i]!='\n')
					i++;
			zad[i]='\0';
			lista=dodaj(pkty,lista,zad);
		}
		fflush(stdout);
	while(lista->nast->nast!=NULL)
		lista=lista->nast;
		return lista;
}

int wypisz(struct element *lista)
{
	int i=1;
	struct element *el;
	el=lista;
	while(el!=NULL)
	{
		printf("Zadanie nr %d:\n",i);
		printf("\t%d\n",el->liczba_pktow);
		printf("\t%s\n",el->zadanie);
		el=el->poprz;
		i++;

	}
	return i-1;
}

void sort_wg_pktow(struct element *lista,int liczba_zadan)
{
	while(lista->nast->nast!=NULL)
		lista=lista->nast;
	int i,j,temp,b,c=0;
	struct element *pom=lista;
	pom=(struct element *)malloc(sizeof(struct element));
	struct element *pom2=lista;
	pom2=(struct element *)malloc(sizeof(struct element));
	for (i=0; i<liczba_zadan; i++)
	{

		for (j=0; j<liczba_zadan-1; j++)
		{printf("dupa");
			if (lista->liczba_pktow > lista->poprz->liczba_pktow)
			{
				pom->liczba_pktow = lista->poprz->liczba_pktow;
				for(b=0;b<1000;b++)
					pom->zadanie[b] = lista->poprz->zadanie[b];

				lista->poprz->liczba_pktow = lista->liczba_pktow;
				for(b=0;b<1000;b++)
					lista->poprz->zadanie[b] = lista->zadanie[b];

				lista->liczba_pktow = pom->liczba_pktow;
				for(b=0;b<1000;b++)
					lista->zadanie[b] = pom->zadanie[b];
			}
			lista=lista->poprz;
		}
		pom2=pom2->poprz;
		lista=pom2;
	}
	printf("\n\n");

}

int main(void)
{
    int liczba_zadan;
    int liczba_pktow;
    int i=1;
	struct element *lista;

	lista=utworz(lista);
	lista=(struct element *)malloc(sizeof(struct element));
	lista->liczba_pktow=0;
	lista->zadanie[0]='0';
	lista->nast=NULL;
	lista->poprz=NULL;
	lista=wczytaj_baze(lista);
    liczba_zadan=wypisz(lista);
	sort_wg_pktow(lista,liczba_zadan);
	liczba_zadan=wypisz(lista);
	free(lista);
	return 0;
}

Nie mam pojecia co jest zle, program sie zawiesza na koncu, i w ogóle nie sortuje. jezeli ktos by mogl napisac mi co jest zle bylabym wdziecza:)