Last active
October 13, 2023 00:51
-
-
Save evilthreads669966/288c52ff676b4877e2413eb4be49066f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
using namespace std; | |
struct EmptyListException : public exception{ | |
const char* what() throw() { | |
return "empty list"; | |
} | |
}; | |
template<typename T> struct Node{ | |
T data; | |
Node<T>* next = nullptr; | |
}; | |
template<typename T> class LinkedList{ | |
Node<T>* head = nullptr; | |
public: | |
void insert(T data){ | |
Node<T> *newNode = new Node<T>; | |
newNode->data = data; | |
if(head == nullptr){ | |
head = newNode; | |
}else{ | |
newNode->next = head; | |
head = newNode; | |
} | |
} | |
bool remove(T data){ | |
Node<T>* node = head; | |
if(head->data == data){ | |
head = head->next; | |
return true; | |
} | |
while(node->next != nullptr){ | |
if(node->next->data == data){ | |
Node<T>* removedNode = node->next; | |
node->next = removedNode->next; | |
delete removedNode; | |
return true; | |
}else{ | |
node = node->next; | |
} | |
} | |
return false; | |
} | |
int findPosition(T data){ | |
Node<T>* node = head; | |
if(node == nullptr) | |
return -1; | |
int position = 0; | |
while(node != nullptr){ | |
if(node->data == data) | |
return position; | |
++position; | |
node = node->next; | |
} | |
return -1; | |
} | |
int size(){ | |
Node<T>* node = head; | |
if(node == nullptr) | |
return 0; | |
int count = 0; | |
while(node != nullptr){ | |
++count; | |
node = node->next; | |
} | |
return count; | |
} | |
T pop(){ | |
if(head == nullptr){ | |
//probably supposed to throw an exception | |
throw EmptyListException(); | |
} | |
Node<T>* curr = head; | |
Node<T>* prev = nullptr; | |
while(curr->next != nullptr){ | |
prev = curr; | |
curr = curr->next; | |
} | |
T data = curr->data; | |
prev->next = nullptr; | |
} | |
void push(T data){ | |
Node<T> *newNode = new Node<T>; | |
newNode->data = data; | |
if(head == nullptr){ | |
head = newNode; | |
} | |
Node<T>* curr = head; | |
while(curr->next != nullptr){ | |
curr = curr->next; | |
} | |
curr->next = newNode; | |
} | |
void show(){ | |
Node<T>* node = head; | |
while(node != nullptr){ | |
cout << node->data << " "; | |
node = node->next; | |
} | |
} | |
~LinkedList(){ | |
delete head; | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment