
template <typename T>
class victor{
    T _data;
    victor * _next;
public:
    victor(){
        _data = 0;
        _next = 0;
    }
    victor(T data){
        _data=data;
        _next=0;
    }
    victor(T data, victor * next){
        _data=data;
        _next=next;
    }
    ~victor(){
        delete _next;
    }
    //method
    victor * next(){
        return _next;
    }
    victor * begin(){
        return this;
    }
    victor * end(){
        if (_next)
            return _next->end();
        return this;
    }
    void push(T data){
        victor * _tmp = _next;
        _next = new victor(data,_tmp);
    }
    T & get(){
        return _data;
    }
    T getAt(int index){
        if (index)
        {
            if (_next)
                return _next->getAt(index-1);
            return 0;
        }
        return _data;
    }
    void set(T data){
        _data = data;
    }
    void setAt(int index, T data){
        if(index)
        {
            if(_next)
                _next->setAt(index-1,data);
            return;
        }
        _data = data;
    }
    int size(){
        if (_next)
            return _next->size()+1;
    }
    void remove(victor * candidate){
        if (candidate!=this)
            if (candidate==_next)
            {
                _next = candidate->next();
                delete candidate;
            }
            else
                _next->remove(candidate);
    }
    typedef victor<T>* iterator;
};



