#include "lista.h"

void Lista::kopiraj (const Lista& lst) {
	prvi = 0;
	for (Elem *tek=lst.prvi, *posl=0; tek; tek=tek->sled) {
		Elem *novi = new Elem (tek->broj);
		if(!prvi) prvi=novi; else posl->sled = novi;
		posl = novi;
	}
}

void Lista::brisi() {
	while(prvi) {
		Elem *stari = prvi;
		prvi = prvi->sled;
		delete stari;
	}
	prvi = 0;
}

int Lista::operator + () {
	int n=0;
	for(Elem* tek=prvi; tek; tek=tek->sled) n++;
	return n;
}

Lista& Lista::operator += (int b) {
	Elem *novi = new Elem (b);
	if(!prvi) prvi = novi;
	else {
		Elem *tek=prvi;
		while(tek->broj < b) tek=tek->sled;
		novi->sled = tek->sled;
		tek->sled = novi;
	}
	return *this;
}

Lista operator+ (Lista& lst, int b) {
	lst += b;
	return lst;
}

Lista& Lista::operator -= (int b) {
	if(!prvi) return *this;
	else {
	Elem *tek = prvi;
	while(tek->broj < b) tek=tek->sled;
	Elem *brisi = tek; brisi = brisi->sled;
	tek->sled = brisi->sled;
	delete brisi;
	return *this;
	}
}

Lista operator- (Lista& lst, int b) {
	lst -= b;
	return lst;
}

int Lista::operator % (int b) {
	int n=0;
	for (Elem* tek=prvi; tek; tek=tek->sled) if(tek->broj == b) n++;
	return n;
}

Lista& Lista::operator ~ () {
	brisi();
	return *this;
}

istream& operator >> (istream& d, Lista& lst) {
	int b; d >> b;
	lst+=b;
	return d;
}

ostream& operator << (ostream& d, const Lista& lst) {
	for(Lista::Elem *tek=lst.prvi; tek; tek=tek->sled)
		d << tek->broj << ' ';
	return d;
}

Lista& Lista::operator-- (int b) {
	int n = +(*this);
	for(int i=0; i<n; i++) cin >> *this;
	return *this;
}