/******************************************************** Author: Denis Biondic @ ETF Bihac Date: 16.02.07 20:49 Description: Simple linked list with: - insertFirst() - deleteFirst() - deleteLink() - deleteDivisibleByFour() - find() - showList() *********************************************************/ #include using namespace std; //======================================================// //====================== Link ==========================// //======================================================// class Link { public: Link *next; int data; Link( int ); }; //=================== konstruktor =======================// Link::Link(int d) { next = NULL; data = d; } //======================================================// //================= SingleLinkedList ==================// //======================================================// class SingleLinkedList { Link *first; public: SingleLinkedList(); ~SingleLinkedList(); void insertFirst(int elem); void deleteFirst(); void deleteLink(int index); void deleteDivisibleByFour(); int find(int num); void showList(); }; //=================== konstruktor =======================// SingleLinkedList::SingleLinkedList() { first = NULL; } //=================== destruktor ========================// SingleLinkedList::~SingleLinkedList() { Link *current = first; Link *toDelete; while (current != NULL) { toDelete = current; current = current->next; delete toDelete; } } //==================== insertFirst() ====================// void SingleLinkedList::insertFirst(int elem) { Link *newLink = new Link(elem); if (first == NULL) { first = newLink; } else { newLink->next = first; first = newLink; } } //==================== deleteFirst() ====================// void SingleLinkedList::deleteFirst() { Link *toDelete = first; first = first->next; delete toDelete; } //====================== deleteLink() ==================// void SingleLinkedList::deleteLink(int index) { if (index == 0) this->deleteFirst(); else { Link *current = first; for (int i=0; i < index-1; i++) current = current->next; Link *toDelete = current->next; current->next = current->next->next; delete toDelete; } } //=================== deleteByFour() ==================// void SingleLinkedList::deleteDivisibleByFour() { Link *current = first; int index = 0; while (current != NULL) { if ((current->data % 4 ) == 0) { current = current->next; this->deleteLink(index); } else { current = current->next; index++; } } } //======================= find() ========================// int SingleLinkedList::find(int num) { Link *current = first; int index = 0; while (current->data != num) { index++; current = current->next; if (current == NULL) return -1; } return index; } //==================== showList() =======================// void SingleLinkedList::showList() { Link *current = first; while (current != NULL) { cout << "Data : " << current->data << endl; current = current->next; } } //======================================================// //<<<<<<<<<<<<<<<<<<<<<< MAIN() >>>>>>>>>>>>>>>>>>>>>>>>// //======================================================// int main(void) { SingleLinkedList list; list.insertFirst(4); list.insertFirst(8); list.insertFirst(16); list.insertFirst(111); list.insertFirst(55); list.showList(); list.deleteDivisibleByFour(); cout << "\n" << "After: " << "\n\n"; list.showList(); cout << "\n" << "Find (5): "; cout << list.find(5) << "\n"; system("pause"); return EXIT_SUCCESS; }