main.cpp---------------------------------------------------------------------------------------
#include "LinkList.h"
#include <iostream>
using namespace std;
int main()
{
linkedlist obj;
obj.pushfront(3);
obj.pushfront(6);
obj.pushfront(20);
obj.popback();
obj.pushfront(5);
obj.pushback(12);
obj.popfront();
obj.deletel(2);
obj.printlistfromfront();
obj.printlistfromtail();
obj.size();
cin.get();
return 0;
}
Node.h--------------------------------------------------------------------------------------------
#include <cstddef>
#include <iostream>
using namespace std;
class Node{
public:
int item;
Node *next;
Node *prev;
friend ostream& operator<< (ostream& print, const Node &value){
return print << value.item;
};
Node(int data){
item = data;
next=NULL; //set it = to NULL by default so it doesnt hold a random value
prev =NULL; //set it = to NULL by default so it doesnt hold a random value
}
};
LinkList.h------------------------------------------------------------------------------
#include "Node.h"
#include <cstddef>
#include<iostream>
using namespace std;
class linkedlist{
public:
linkedlist(){
front=NULL;
tail=NULL;
};
void pushfront(int item){{
if (front == NULL){
front =tail = new Node(item);
front -> next = NULL;
tail -> prev = NULL;
}
else //or else
{
Node *temp;
temp = new Node(item);
temp -> next = front;
front -> prev = temp;
front = temp;
}}
}
void popfront (){
if (front == NULL)
return;
else
{
Node *temp;
temp = front;
front = front -> next;
front -> prev = NULL;
front -> next = (temp-> next)->next;
delete temp;
}
}
void pushback( int item){
if (front == NULL){
front = tail = new Node(item);
front -> next = NULL;
tail -> prev = NULL;
}
else
{
Node *temp = new Node(item);
tail -> next = temp;
temp -> prev = tail;
tail = temp;
}
}
void popback(){
Node* temp = tail;
(temp -> prev) -> next = NULL;
tail = temp -> prev;
delete temp;
}
int size(){
Node* traverse;
int sizel = 0;
traverse = front;
while (traverse != NULL){
traverse = traverse -> next;
sizel++;
}
cout << "The size of the list is: "<<sizel<<endl;
return sizel;
}
void deletel(int ith){
Node* traversle;
int sizel = 0;
traversle = front;
while (traversle != NULL){
traversle = traversle -> next;
sizel++;
}
if (ith <= sizel){
if (front == NULL && tail == NULL){
cout<<"there are no nodes to delete.";
}
if ((front -> next == NULL) && (tail -> prev == NULL)){
front = tail = NULL;}
else{
int i = 0;
Node *traverse;
traverse = front;
while (i < ith ){
traverse = traverse -> next;
i++;
}
(traverse -> next) -> prev = traverse -> prev;
(traverse -> prev) -> next = traverse -> next;
}
}
else{
cout << "There is no such node" << endl;
}
}
void printlistfromfront(){
Node* traverse;
traverse = front;
cout << "Items starting from the front of the list are:\a ";
while (traverse != NULL){
cout <<" " << *traverse;
traverse = traverse -> next;
}
cout << endl;
}
void printlistfromtail(){
Node *traversle;
traversle = tail;
cout << "Items from the end of the list, going backwards are:\a ";
while (traversle != NULL){
cout << " " << *traversle;
traversle = traversle -> prev;
}
cout << endl;
}
private:
Node *front;
Node *tail;
};