So, I've been trying to implement a doubly linked list in C but I ran into trouble when I tried to delete the first element of the list. Looked up C++ classes and such and decided to rewrite it as a class. And it seems to work a bit better now.
Anyone feel like going over this one with a critical eye? :>
EDIT: (Hope it's not too much code)
Code:#include <iostream> using namespace std; class list { private: struct member { int ID; member *next; member *prev; }; int nextID; member *start; member *link; member *end; list operator = (list); public: list() { start = link = end = NULL; nextID = 0; } ~list() { if(listExists()) { wipeList(); } } void addLink(); void delLink(int ID); void delStart(); void delEnd(); void wipeList(); void printLinkID(); bool nextLink(); bool prevLink(); bool seekLink(int ID); bool listExists(); }; bool list::listExists() { if(start != NULL) { return true; } return false; } void list::wipeList() { while(listExists()) { delStart(); } } void list::delStart() { member *temp; if(listExists()) { temp = start; if(start->next != NULL) { start = start->next; start->prev = NULL; } else { start = NULL; } delete temp; } } void list::delEnd() { member *temp; if(listExists()) { temp = end; if(end->prev != NULL) { end = end->prev; end->next = NULL; } else { end = NULL; } delete temp; } } void list::delLink(int ID) { member *temp; if(seekLink(ID)) { if(link->next != NULL) { if(link->prev != NULL) { link->prev->next = link->next; link->next->prev = link->prev; } else { link->next->prev = NULL; start = link->next; } temp = link; link = link->next; delete temp; } else { temp = link; end = link->prev; end->next = NULL; delete temp; } } } void list::addLink() { if(listExists()) { member *newLink = new member; if(link->next != NULL) { newLink->next = link->next; } else { end = newLink; } newLink->prev = link; newLink->ID = nextID++; link->next = newLink; } else { start = new member; link = end = start; start->prev = start->next = NULL; link->ID = nextID++; } } bool list::seekLink(int ID) { link = start; do { if(link->ID == ID) { return true; } } while(nextLink()); return false; } void list::printLinkID() { if(listExists()) { link = start; cout << "List Exists!" << endl; do { cout << link->ID << endl; } while(nextLink()); } else { cout << "List does not exist!" << endl; } } bool list::nextLink() { if(link->next != NULL) { link = link->next; return true; } return false; } bool list::prevLink() { if(link->prev != NULL) { link = link->prev; return true; } return false; } int main() { list test; int i; for(i = 0; i < 10; i++) { test.addLink(); test.nextLink(); } test.printLinkID(); cout << endl; test.delLink(0); test.delLink(4); test.delLink(9); test.printLinkID(); cout << endl; test.delStart(); test.delStart(); test.delStart(); test.delStart(); test.delStart(); test.delStart(); test.delStart(); test.delStart(); test.printLinkID(); return 0; }



LinkBack URL
About LinkBacks



