/*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;
}
Пример #7
0
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;
}