Federal102
January 13th, 2004, 08:47 AM
In preparation for an interview tomorrow, I decided to try and code a simple templated linked list. I am a big fan of STL and use std::list regularly, but I have never really delved into the innards of the code.
That being said I have code that works to create the list, insert members and print them out (any comments on this gladly accepted).
I know that in the destructor (list or node) I need to free the memory and here is where I am stuck. Any ideas would be greatly appreciated.
Here is my code...
template <class T>
class myList
{
public:
myList():head(0), count(0){}
void insert(T);
void walk();
private:
struct Node
{
Node(T t):m_t(t){}
Node *next;
T m_t;
};
Node *head;
Node *current;
Node *iterator;
Node *n;
int count;
};
template <class T>
void myList<T>::insert(T ins_t)
{
if(head == 0)
{
n = new Node(ins_t);
head = n;
iterator = n;
current = n;
current->next = 0;
++count;
}
else
{
n = new Node(ins_t);
current->next = n;
current = n;
current->next = 0;
++count;
}
}
template<class T>
void myList<T>::walk()
{
int count_hold = count;
while(count)
{
cout << iterator->m_t << endl;
iterator = iterator->next;
--count;
}
iterator = head;
count = count_hold;
}
int main(int argc, char* argv[])
{
myList<string> v;
v.insert("Hello");
v.insert("World");
v.walk();
return 0;
}
That being said I have code that works to create the list, insert members and print them out (any comments on this gladly accepted).
I know that in the destructor (list or node) I need to free the memory and here is where I am stuck. Any ideas would be greatly appreciated.
Here is my code...
template <class T>
class myList
{
public:
myList():head(0), count(0){}
void insert(T);
void walk();
private:
struct Node
{
Node(T t):m_t(t){}
Node *next;
T m_t;
};
Node *head;
Node *current;
Node *iterator;
Node *n;
int count;
};
template <class T>
void myList<T>::insert(T ins_t)
{
if(head == 0)
{
n = new Node(ins_t);
head = n;
iterator = n;
current = n;
current->next = 0;
++count;
}
else
{
n = new Node(ins_t);
current->next = n;
current = n;
current->next = 0;
++count;
}
}
template<class T>
void myList<T>::walk()
{
int count_hold = count;
while(count)
{
cout << iterator->m_t << endl;
iterator = iterator->next;
--count;
}
iterator = head;
count = count_hold;
}
int main(int argc, char* argv[])
{
myList<string> v;
v.insert("Hello");
v.insert("World");
v.walk();
return 0;
}