#include <iostream>
#include <iostream>
using namespace std;
template<typename E> class SLinkedList;
template<typename E> class SNode{
private:
E element;
SNode<E> * next;
friend class SLinkedList<E>;
public:
E getElement(){
return element;
}
SNode getnext(){
return next;
}
void setElement(E newElement){
this->element=newElement;
}
void setnext(SNode <E> newNext){
this->next=newNext;
}
};
template<typename E>
class SLinkedList {
private:
SNode<E> *head;
public:
SLinkedList();
~SLinkedList();
bool empty() const;
const E & front() const;
void addFront(const E& elem);
void removeFront();
void printList();
};
template<typename E>
SLinkedList<E>::SLinkedList()
:head(NULL){}
template <typename E>
SLinkedList<E>::~SLinkedList()
{
while (!empty())
removeFront();
}
template<typename E>
bool SLinkedList<E>::empty() const{
return (head==NULL);
}
template<typename E>
const E & SLinkedList<E>::front() const{
return head->element;
}
template<typename E>
void SLinkedList<E>::addFront(const E& elem){
SNode<E> * n=new SNode<E>;
n->element=elem;
n->next=head;
head=n;
}
template<typename E>
void SLinkedList<E>::removeFront(){
if(this->empty()){
cout<<"Lista jest pusta, nie ma co usunac"<<endl;
}
else{
SNode<E> * tmp=head;
head=head->next;
delete tmp;
}
}
template<typename E>
void SLinkedList<E>::printList(){
SNode<E> *tmp=head;
while(tmp !=NULL){
cout<<tmp->element;
tmp=tmp->next;
}
}
int main(){
SLinkedList<int> lista;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBFPiBjbGFzcyBTTGlua2VkTGlzdDsKCnRlbXBsYXRlPHR5cGVuYW1lIEU+ICBjbGFzcyBTTm9kZXsKICAgIHByaXZhdGU6CiAgICAgICAgRSBlbGVtZW50OwogICAgICAgIFNOb2RlPEU+ICogbmV4dDsKICAgICAgICBmcmllbmQgY2xhc3MgU0xpbmtlZExpc3Q8RT47CiAKICAgIHB1YmxpYzoKICAgICAgICBFIGdldEVsZW1lbnQoKXsKICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgfQogICAgICAgIFNOb2RlIGdldG5leHQoKXsKICAgICAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgICAgfQogICAgICAgIHZvaWQgc2V0RWxlbWVudChFIG5ld0VsZW1lbnQpewogICAgICAgICAgICB0aGlzLT5lbGVtZW50PW5ld0VsZW1lbnQ7CiAgICAgICAgfQogICAgICAgIHZvaWQgc2V0bmV4dChTTm9kZSA8RT4gbmV3TmV4dCl7CiAgICAgICAgICAgIHRoaXMtPm5leHQ9bmV3TmV4dDsKICAgICAgICB9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBFPgpjbGFzcyBTTGlua2VkTGlzdCB7CnByaXZhdGU6CiAKICAgIFNOb2RlPEU+ICpoZWFkOwogCnB1YmxpYzoKIAogICAgU0xpbmtlZExpc3QoKTsKICAgIH5TTGlua2VkTGlzdCgpOwogCiAgICBib29sIGVtcHR5KCkgY29uc3Q7CiAgICBjb25zdCBFICYgZnJvbnQoKSBjb25zdDsKICAgIHZvaWQgYWRkRnJvbnQoY29uc3QgRSYgZWxlbSk7CiAgICB2b2lkIHJlbW92ZUZyb250KCk7CiAgICB2b2lkIHByaW50TGlzdCgpOwp9OwoKCnRlbXBsYXRlPHR5cGVuYW1lIEU+ClNMaW5rZWRMaXN0PEU+OjpTTGlua2VkTGlzdCgpCiAgICA6aGVhZChOVUxMKXt9CiAKdGVtcGxhdGUgPHR5cGVuYW1lIEU+ClNMaW5rZWRMaXN0PEU+Ojp+U0xpbmtlZExpc3QoKQp7CiAgICB3aGlsZSAoIWVtcHR5KCkpCiAgICAgICAgcmVtb3ZlRnJvbnQoKTsKfQogCiAKdGVtcGxhdGU8dHlwZW5hbWUgRT4KYm9vbCBTTGlua2VkTGlzdDxFPjo6ZW1wdHkoKSBjb25zdHsKIAogICAgcmV0dXJuIChoZWFkPT1OVUxMKTsKIAp9CiAKdGVtcGxhdGU8dHlwZW5hbWUgRT4KY29uc3QgRSAmIFNMaW5rZWRMaXN0PEU+Ojpmcm9udCgpIGNvbnN0ewogCiAgICByZXR1cm4gaGVhZC0+ZWxlbWVudDsKIAp9CiAKdGVtcGxhdGU8dHlwZW5hbWUgRT4Kdm9pZCBTTGlua2VkTGlzdDxFPjo6YWRkRnJvbnQoY29uc3QgRSYgZWxlbSl7CiAKICAgIFNOb2RlPEU+ICogbj1uZXcgU05vZGU8RT47CiAgICBuLT5lbGVtZW50PWVsZW07CiAgICBuLT5uZXh0PWhlYWQ7CiAgICBoZWFkPW47CiAKfQogCnRlbXBsYXRlPHR5cGVuYW1lIEU+CnZvaWQgU0xpbmtlZExpc3Q8RT46OnJlbW92ZUZyb250KCl7CiAKICAgIGlmKHRoaXMtPmVtcHR5KCkpewogICAgICAgIGNvdXQ8PCJMaXN0YSBqZXN0IHB1c3RhLCBuaWUgbWEgY28gdXN1bmFjIjw8ZW5kbDsKICAgIH0KICAgIGVsc2V7CiAgICBTTm9kZTxFPiAqIHRtcD1oZWFkOwogICAgaGVhZD1oZWFkLT5uZXh0OwogICAgZGVsZXRlIHRtcDsKICAgIH0KIAp9CiAKdGVtcGxhdGU8dHlwZW5hbWUgRT4Kdm9pZCBTTGlua2VkTGlzdDxFPjo6cHJpbnRMaXN0KCl7CiAKICAgIFNOb2RlPEU+ICp0bXA9aGVhZDsKIAogICAgd2hpbGUodG1wICE9TlVMTCl7CiAgICAgICAgY291dDw8dG1wLT5lbGVtZW50OwogICAgICAgIHRtcD10bXAtPm5leHQ7CiAgICB9CiAKfQoKCiAKaW50IG1haW4oKXsKIApTTGlua2VkTGlzdDxpbnQ+IGxpc3RhOwogCiAKIAogCnJldHVybiAwOwp9