Linked List exercise, what am I doing wrong?
- by Sean Ochoa
Hey all. I'm doing a linked list exercise that involves dynamic memory allocation, pointers, classes, and exceptions. Would someone be willing to critique it and tell me what I did wrong and what I should have done better both with regards to style and to those subjects I listed above?
/*
Linked List exercise
*/
#include <iostream>
#include <exception>
#include <string>
using namespace std;
class node{
public:
node * next;
int * data;
node(const int i){
data = new int;
*data = i;
}
node& operator=(node n){
*data = *(n.data);
}
~node(){
delete data;
}
};
class linkedList{
public:
node * head;
node * tail;
int nodeCount;
linkedList(){
head = NULL;
tail = NULL;
}
~linkedList(){
while (head){
node* t = head->next;
delete head;
if (t) head = t;
}
}
void add(node * n){
if (!head) {
head = n;
head->next = NULL;
tail = head;
nodeCount = 0;
}else {
node * t = head;
while (t->next) t = t->next;
t->next = n;
n->next = NULL;
nodeCount++;
}
}
node * operator[](const int &i){
if ((i >= 0) && (i < nodeCount)) throw new exception("ERROR: Invalid index on linked list.", -1);
node *t = head;
for (int x = i; x < nodeCount; x++) t = t->next;
return t;
}
void print(){
if (!head) return;
node * t = head;
string collection;
cout << "[";
int c = 0;
if (!t->next) cout << *(t->data);
else while (t->next){
cout << *(t->data);
c++;
if (t->next) t = t->next;
if (c < nodeCount) cout << ", ";
}
cout << "]" << endl;
}
};
int main (const int & argc, const char * argv[]){
try{
linkedList * myList = new linkedList;
for (int x = 0; x < 10; x++) myList->add(new node(x));
myList->print();
}catch(exception &ex){
cout << ex.what() << endl;
return -1;
}
return 0;
}