/*
 *
 *  lista osztaly megvalositasa: list.cpp
 */

#include <iostream>
#include "list.h"

using namespace std;

lista::lista()
{
    elso = utolso = 0;  // this->elso = this->utolso = 0;
    elemek_szama = 0;   // this->elemek_szama = 0;
}

lista::~lista()
{
    while ( elso )      // this->elso
    {
        elem *kurrens = elso;
        elso = kurrens->kovetkezo;
        // elso->elozo = 0;
        // --elemek_szama;
        delete kurrens;
    }
}

void lista::beszur( elem *p, int ii)
{
    elem *uj = new elem;
    uj->ertek = ii;
    uj->elozo = uj->kovetkezo = 0;
    
    if ( !elso )    // ures a lista
    {
        elso = utolso = uj;
    }
    else if ( !p )  // nem ures lista vegere appendalunk
    {
        uj->elozo = utolso;
        utolso->kovetkezo = uj;
        utolso = uj;
    }
    else if ( p == elso ) // nem ures lista elso poziciojara szurunk be
    {
        uj->kovetkezo = elso;
        elso->elozo = uj;
        elso = uj;
    }
    else    // nem ures lista kozbulso poziciojara szurunk be p ele
    {
        uj->kovetkezo = p;
        uj->elozo = p->elozo;
        uj->elozo->kovetkezo = uj;
        p->elozo = uj;
    }
    ++elemek_szama;
}

void lista::rendezve_beszur( int ii )
{
    elem *kurrens = elso;
    
    while ( kurrens && ii > kurrens->ertek )
    {
        kurrens = kurrens->kovetkezo;
    }
    beszur( kurrens, ii);
}

void lista::kiir_elore()
{
    elem *kurrens = elso;
    
    while ( kurrens )
    {
        cout << kurrens->ertek << endl;
        kurrens = kurrens->kovetkezo;
    }
}

void lista::kiir_hatra()
{
    elem *kurrens = utolso;
    
    while ( kurrens )
    {
        cout << kurrens->ertek << endl;
        kurrens = kurrens->elozo;
    }
}