Länkad lista [C++]
Har problem med en enkellänkad lista i C++.
Varning för mycket okommenterad kod. ^^-~
Får en core-dump när element skall läggas till i listan. Kan någon kanske hjälpa mig lite med att se varför jag inte kan lägga till ett nytt element?
Kan antagligen inte ta bort element heller.
Körning ger:
Lägg till: 34
På position: 0
Segmentation fault (core dumped)
//Constructor
List::List()
{
size = 0;
head = 0;
}
//Destructor
List::~List()
{
for(int i=0; i<getSize(); i++)
{
remove(i);
}
}
void List::insert(Element e, int position)
{
Node *tempnod, *newNode = new Node;
tempnod = getNode(position);
newNode = getNode(position);
if (position == 0)
{
newNode->next = tempnod;
} else {
newNode->next = getNode(position+1);
}
newNode->data = e;
size++;
}
void List::remove(int position)
{
Node *tempnod, *toRemove = getNode(position);
if (position == 0)
{
head = toRemove->next;
} else {
tempnod = getNode(position-1);
tempnod->next = toRemove->next;
}
delete toRemove;
toRemove = 0;
size--;
}
Node* List::getNode(int position)
{
Node *temp = head;
for( int i=0; i<position-1; i++)
temp = temp->next;
return temp;
}
void List::sort()
{
Node *temp, *Node1, *Node2;
int i, n;
for (i=0; i<size-1; i++)
{
for (n=0; n<size-1; n++)
{
Node1 = getNode(i);
Node2 = getNode(n);
if (Node1->data > Node2->data)
{
temp = Node1;
Node1 = Node2;
Node2 = temp;
}
}
}
}
bool List::isElement(Element e)
{
for (int i=0; i<size; i++)
{
Node *pos = getNode(i);
if (pos->data == e)
return true;
}
return false;
}
int List::getPosition(Element e)
{
int i;
Node *temp;
for ( i=0; i<size; i++)
{
temp = getNode(i);
if (temp->data == e)
return i;
}
return -1;
}
bool List::isEmpty()
{
if (size>0)
return false;
return true;
}
int List::getSize()
{
return size;
}
int List::getElement(int position)
{
Node *temp = getNode(position);
return temp->data;
}
Klassen Lista:
class List
{
public:
typedef int Element;
List();
~List();
void insert(Element e, int position);
void remove(int position);
void sort();
int getPosition(Element e);
bool isEmpty();
bool isElement(Element e);
int getSize();
int getElement(int position);
private:
Node *getNode(int position);
Node *head; // Pekar på första noden.
int size;
};
Edit:
Glömde klassen Node
class Node
{
friend class List;
private:
int data;
Node* next;
};
Light travels faster than sound. Is that why some people appear to be smart before they speak?
It's a big rock. I can't wait to tell my friends. They don't have a rock this big.