#ifndef lista_pokazivac
#define lista_pokazivac
#include <iostream>
#include <cstring>
using namespace std;

struct tgame {
	char sifra[7];
	char naziv[100];
	char proizvodjac[100];
	char zanr[100];
	char podzanr[100];
	int pegi;
};

struct tlista {
	tgame game;
	tlista *sljedeci;	
};
typedef tlista *vrijed;
tlista *lista = new tlista;
void initL(tlista *lista) {
	lista->sljedeci = NULL;
}

vrijed firstL (tlista *lista) {
		return lista->sljedeci;	
}

vrijed endL (tlista *lista) {
	tlista *zadnji = lista->sljedeci;
	while (zadnji)
		zadnji = zadnji->sljedeci;
	return zadnji;
}

vrijed nextL (vrijed pos, tlista *lista) {
	tlista *trenutni = lista->sljedeci;
	if (!trenutni)
		return NULL;
	if (pos == lista)
		return lista->sljedeci;
	while (trenutni) {
		if (trenutni == pos)
			return trenutni->sljedeci;
		trenutni = trenutni->sljedeci;
	}
	return NULL;
}

vrijed previousL (vrijed pos, tlista *lista) {
	tlista *trenutni = lista->sljedeci;
	tlista *zadnji = lista;
	if (!trenutni)
		return NULL;
	if (pos == lista->sljedeci)
		return lista;
	while (trenutni) {
		if (trenutni == pos)
			return zadnji;
		zadnji = zadnji->sljedeci;
		trenutni = trenutni->sljedeci;
	}
	return NULL;
}

vrijed locateL (char sifra[7], tlista *lista) {
	tlista *zadnji = lista->sljedeci;
	while (zadnji) {
		if (strcmp(zadnji->game.sifra, sifra) == 0)
			return zadnji;
		zadnji = zadnji->sljedeci;
	}

	return NULL;		
}

int insertL (tgame elem, vrijed pos, tlista *lista) {
	tlista *novi, *trenutni;
	trenutni = lista->sljedeci;
	tlista *zadnji = lista;
	while (trenutni) {
		if (trenutni == pos) {
			novi = new tlista;
			novi->sljedeci = trenutni;
			zadnji->sljedeci = novi;
			novi->game = elem;
			return 1;
		}
		zadnji = zadnji->sljedeci;
		trenutni = trenutni->sljedeci;
	}
	if (trenutni == NULL) {
		novi = new tlista;
		novi->sljedeci = trenutni;
		zadnji->sljedeci = novi;
		novi->game = elem;
		return 1;
	}
	return 0;
		
}

void deleteL (vrijed pos, tlista *lista) {
	tlista *prethodni = previousL(pos,lista);
	prethodni->sljedeci = pos->sljedeci;
	delete pos;
}

tgame retrieveL (vrijed pos, tlista *lista) {
	tlista *trenutni = lista->sljedeci;
	while (trenutni) {
		if (trenutni == pos)
			return trenutni->game;
		trenutni = trenutni->sljedeci;	
	}
}

void deleteallL(tlista *lista) {
	tlista *tekuci, *prethodni;
	prethodni = lista->sljedeci;
	tekuci = prethodni->sljedeci;
	while (tekuci) {
		delete prethodni;
		prethodni = tekuci;
		tekuci = tekuci->sljedeci;
	}
	delete prethodni;
	lista->sljedeci =  NULL;
}
#endif