Skip to content

Instantly share code, notes, and snippets.

@AVGP
Created October 1, 2010 12:11
Show Gist options
  • Save AVGP/606116 to your computer and use it in GitHub Desktop.
Save AVGP/606116 to your computer and use it in GitHub Desktop.
#include <cmath>
#include "ListenElement2.h"
class Liste
{
public:
Liste()
{
head = NULL;
tail = NULL;
size = 0;
}
void add(int value,unsigned int position = 0)
{
if(position < 0 || position > size)
{
return; //Abbrechen, falls position ungültig ist
}
ListenElement *newElem = new ListenElement(value);
if(position == 0)
{
if(size == 0)
{
tail = newElem;
}
newElem->setNext(head);
head = newElem;
}
else if(position == size)
{
tail->setNext(newElem);
newElem->setPrev(tail);
tail = newElem;
}
else
{
ListenElement *current = NULL;
if(position <= floor(size/2))
{
current = head;
for(unsigned int i=0;i<position;i++) current = current->getNext();
}
else
{
current = tail;
for(unsigned int i=size-1;i>position;i--) current = current->getPrev();
}
newElem->setNext(current);
newElem->setPrev(current->getPrev());
newElem->getPrev()->setNext(newElem);
current->setPrev(newElem);
}
size++;
}
void remove(unsigned int index)
{
if(size == 0 || index < 0 || index > (size-1)) return;
if(index == 0)
{
head = head->getNext();
size--;
}
else
{
ListenElement *current = NULL;
if(index <= floor(size/2))
{
current = head;
for(unsigned int i=0;i<index;i++) current = current->getNext();
}
else
{
current = tail;
for(unsigned int i=size-1;i>index;i--) current = current->getPrev();
}
current->getPrev()->setNext(current->getNext());
if(current->getNext() != NULL)
{
current->getNext()->setPrev(current->getPrev());
}
else
{
tail = current->getPrev();
}
delete current;
size--;
}
}
int getValue(unsigned int index)
{
ListenElement *current = NULL;
if(index <= floor(size/2))
{
current = head;
for(unsigned int i=0;i<index;i++)
{
current = current->getNext();
}
}
else
{
current = tail;
for(unsigned int i=size-1;i>index;i--)
{
current = current->getPrev();
}
}
return current->getValue();
}
int getSize()
{
return size;
}
private:
ListenElement *head;
ListenElement *tail;
unsigned int size;
};
class ListenElement
{
public:
ListenElement(int pValue,ListenElement *pPrev = NULL,ListenElement *pNext = NULL)
{
value = pValue;
next = pNext;
prev = pPrev;
}
ListenElement *getNext()
{
return next;
}
ListenElement *getPrev()
{
return prev;
}
void setNext(ListenElement *pNext)
{
next = pNext;
}
void setPrev(ListenElement *pPrev)
{
prev = pPrev;
}
int getValue()
{
return value;
}
void setValue(int pValue)
{
value = pValue;
}
private:
int value;
ListenElement *next;
ListenElement *prev;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment