/*Insertar: a) Si la lista esta vacia b) Si se inserta al frente c) Si se inserta al medio*/ bool SLinkedList::insert(Object* data,int pos){ if(pos < 0 || pos > ssize) return false; SLNode* neo = new SLNode(data); if(!neo) return false; if(isEmpty()){ head = neo; }else{ if(pos == 0){ neo->setNext(head); head = neo; }else{ SLNode* tmpn = head; for(int i = 0; i < pos-1; i++){ tmpn = tmpn->getNext(); } neo->setNext(tmpn->getNext()); tmpn->setNext(neo); if(pos == ssize) neo->setNext(NULL); } } ssize++; return true; }
Object* SLinkedList::remove(unsigned int pos){ if(isEmpty()){ return NULL; } if(pos < 0 || pos > ssize){ return NULL; } SLNode* neo = head; Object* retVal = NULL; if(pos == 0){ head = head->getNext(); }else{ for(int i = 0; i < pos-1; i++){ neo = neo->getNext(); } SLNode* tmpn = neo; neo = neo->getNext(); tmpn->setNext(neo->getNext()); } retVal = neo->getData(); neo->setData(NULL); neo->setNext(NULL); delete neo; ssize--; return retVal; }
void SLinkedList::print()const{ if(!(isEmpty())){ SLNode* tmpn = head; for(int i = 0; i < ssize; i++){ tmpn->getData()->print(); tmpn = tmpn->getNext(); } } }
Object* SLinkedList::last()const{ if(isEmpty()){ return NULL; } SLNode* tmpn = head; for(int i = 0; i < ssize-1; i++){ tmpn = tmpn->getNext(); } return tmpn->getData(); }
Object* SLinkedList::get(unsigned int pos)const{ if(isEmpty()){ return NULL; } if(pos < 0 && pos >= ssize){ return NULL; } SLNode* tmpn = head; for(int i = 0; i < pos; i++){ tmpn = tmpn->getNext(); } return tmpn->getData(); }
int SLinkedList::indexOf(Object* data)const{ if(isEmpty()){ return -1; } SLNode* tmpn = head; for(int i = 0; i < ssize; i++){ if(tmpn->getData()->equals(data)){ return i; } tmpn = tmpn->getNext(); } return -1; }
bool SLQueue::queue(Object* E) { SLNode* neo = new SLNode(E); if (!neo) return false; if (isEmpty()) head = neo; else { SLNode* tmp = head; for (int i = 0; i < size - 1; i++) tmp = tmp->getNext(); tmp->setNext(neo); } size++; return true; }