Skip to content

Instantly share code, notes, and snippets.

@evilthreads669966
Last active October 13, 2023 00:51
Show Gist options
  • Save evilthreads669966/288c52ff676b4877e2413eb4be49066f to your computer and use it in GitHub Desktop.
Save evilthreads669966/288c52ff676b4877e2413eb4be49066f to your computer and use it in GitHub Desktop.
#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