Assignment 10
Assignment 10
template<class T>
class Node {
public:
T value;
Node* next;
Node() {
value = 0;
next = NULL;
}
Node(T value) {
this->value = value;
next = NULL;
}
};
template <class T>
class Linkedlist {
int size;
Node<T>* head;
Node<T>* tail;
public:
Linkedlist() {
size = 0;
head = NULL;
tail = nullptr;
}
//-Q1-
//void InsertFront(T value) {
// Node<T>* newNode = new Node<T>(value);
// if (head == NULL) {
// //newNode->next = head;
// head = newNode;
// tail = newNode;
// size++;
// }
// else {
// newNode->next = head;
// head = newNode;
// size++;
// }
//}
//void InsertBack(T value) {
// Node<T>* newNode = new Node<T>(value);
///* Node* p = head;
// while (p->next != NULL){
// p = p->next;
// }
// p->next = newNode;*/
// if (head == nullptr) {
// head = newNode;
// tail = newNode;
// size++;
// }
// else {
// tail->next = newNode;
// tail = tail->next;
// size++;
// }
//}
/*void InsertAtPosition(int position , T value){
if (position < 0 || position > size+1) {
cout << "Out of Bounds" << endl;
return;
}
else if(position == 1) {
InsertFront(value);
}
else if (position == size+1) {
InsertBack(value);
}
else {
Node<T>* newNode = new Node<T>(value);
Node<T>* p = head;
for (int i = 1; i < position-1; i++){
p = p->next;
}
newNode->next = p->next;
p->next = newNode;
size++;
}
}*/
//===============================================================
//-Q2-
//void RemoveFront() {
// if (head == NULL) {
// return;
// }
// Node<T>* p = head;
// head = head->next;
// delete p;
// size--;
//}
//void RemoveBack() {
// if (head == NULL) {
// return;
// }
// /*Node* p = head;
// while (p->next->next != NULL) {
// p = p->next;
// }
// delete p;*/
// else if (head == tail) {
// delete head;
// head = NULL;
// tail = NULL;
// }
// else {
// Node<T>* p = head;
// while (p->next != tail) {
// p = p->next;
// }
// delete tail;
// tail = p;
// tail->next = NULL;
// }
// size--;
//}
//void RemoveAtPosition(int OrdarFromEnd) {
// if (head == NULL) {
// return;
// }
// else if (OrdarFromEnd == size) {
// RemoveFront();
// }
// else if(OrdarFromEnd == 1){
// RemoveBack();
// }
// else {
// Node<T>* p1 = head;
// for (int i = 1; i < size-OrdarFromEnd; i++){
// p1 = p1->next;
// }
// Node<T>* p2 = p1->next;
// p1->next = p1->next->next;
// delete p2;
// size--;
// }
//}
//=================================================================
//-Q3-
//T getValueAtPosition(int position) {
// if (position < 1 || position > size) {
// throw 5;
// }
// else {
// Node<T>* p = head;
// for (int i = 1; i < position; i++) {
// p = p->next;
// }
// return p->value;
// }
//}
};
//#include<iostream>
//using namespace std;
//int main(){
/*Linkedlist <int> link1;
link1.InsertBack(7);
link1.InsertBack(5);
link1.InsertBack(3);
link1.InsertBack(1);*/
/*try {
cout << link1.getValueAtPosition(1) << endl;
cout << link1.getValueAtPosition(2) << endl;
cout << link1.getValueAtPosition(3) << endl;
cout << link1.getValueAtPosition(4) << endl;
cout << link1.getValueAtPosition(5) << endl;
}
catch (int) {
cout << "Out of Bounds" << endl;
}*/
//}
//==================================================================
template<class T>
class DoubleNode {
public:
T value;
DoubleNode<T>* next;
DoubleNode<T>* previous;
DoubleNode() {
value = 0;
next = NULL;
previous = nullptr;
}
DoubleNode(T value) {
this->value = value;
next = NULL;
previous = nullptr;
}
};
template <class T>
class DoubleLinkedlist {
int size;
DoubleNode<T>* head;
DoubleNode<T>* tail;
public:
DoubleLinkedlist() {
size = 0;
head = NULL;
tail = nullptr;
}
//-Q4-
//void InsertFront(T value) {
// DoubleNode<T>* newNode = new DoubleNode<T>(value);
// if (head == NULL) {
// //newNode->next = head;
// head = newNode;
// tail = newNode;
// size++;
// }
// else {
// newNode->next = head;
// head->previous = newNode;
// head = newNode;
// size++;
// }
//}
//void InsertBack(T value) {
// DoubleNode<T>* newNode = new DoubleNode<T>(value);
///* Node* p = head;
// while (p->next != NULL){
// p = p->next;
// }
// p->next = newNode;*/
// if (head == nullptr) {
// head = newNode;
// tail = newNode;
// size++;
// }
// else {
// tail->next = newNode;
// newNode->previous = tail;
// tail = tail->next;
// size++;
// }
//}
//void InsertAt(int idx , T value){
// if (idx < 0 || idx > size - 1) {
// cout << "Out of Bounds" << endl;
// return;
// }
// else if(idx == 0) {
// InsertFront(value);
// }
// else if (idx == size) {
// InsertBack(value);
// }
// else {
// DoubleNode<T>* newNode = new DoubleNode<T>(value);
// DoubleNode<T>* p = head;
// for (int i = 0; i < idx-1; i++){
// p = p->next;
// }
// newNode->next = p->next;
// p->next->previous = newNode;
// p->next = newNode;
// newNode->previous = p;
// size++;
// }
//}
//void InsertAtMid(T value) {
// if (size % 2 == 0) {
// InsertAt((size / 2), value);
// }
// else {
// InsertAt((size / 2)+1, value);
// }
//}
};