using namespace std;
struct List {
int item;
List* nextNode;
List* prevNode;
};
class Node {
private:
List* headNode;
public:
Node(){
headNode = NULL;
}
void push_item(int data) {
List* new_node = new List();
new_node->item = data;
new_node->nextNode = NULL;
new_node->prevNode = NULL;
if(headNode == NULL) {
headNode = new_node;
} else {
List* temp = headNode;
while(temp->nextNode != NULL)
temp = temp->nextNode;
temp->nextNode = new_node;
new_node->prevNode = temp;
}
}
void deleteLast() {
if(headNode != NULL) {
if(headNode->nextNode == NULL) {
headNode = NULL;
} else {
List* temp = headNode;
while(temp->nextNode->nextNode != NULL)
temp = temp->nextNode;
List* last_node = temp->nextNode;
temp->nextNode = NULL;
free(last_node);
}
}
}
void deleteSecondLast(int pos) {
if(pos < 1){
cout<<"\nList is empty";
} else if (pos == 1 && headNode != NULL) {
List* secondLastNode = headNode;
headNode = headNode->nextNode;
free(secondLastNode);
if(headNode != NULL)
headNode->prevNode = NULL;
} else {
List* temp = headNode;
for(int i = 1; i < pos-1; i++) {
if(temp != NULL) {
temp = temp->nextNode;
}
}
if(temp != NULL && temp->nextNode != NULL) {
List* secondLastNode = temp->nextNode;
temp->nextNode = temp->nextNode->nextNode;
if(temp->nextNode->nextNode != NULL)
temp->nextNode->nextNode->prevNode = temp->nextNode;
free(secondLastNode);
} else {
cout<<"\nNo element left.";
}
}
}
void displayList() {
List* tempNode = headNode;
if(tempNode != NULL) {
cout<<"List has: ";
while(tempNode != NULL) {
cout<<tempNode->item<<" ";
tempNode = tempNode->nextNode;
}
cout<<"\n";
} else {
cout<<"The list has no element.\n";
}
}
int getLength(){
int length = 0;
List* tempNode = headNode;
if(tempNode != NULL) {
while(tempNode != NULL) {
cout<<tempNode->item<<" ";
length++;
tempNode = tempNode->nextNode;
}
}
return length;
}
};
int main() {
Node list;
list.push_item(1);
list.push_item(2);
list.push_item(3);
list.push_item(4);
list.push_item(5);
list.push_item(6);
list.displayList();
cout<<"\nDeleting the last element of the linked list\n";
list.deleteLast();
list.displayList();
int n = list.getLength();
n = n -1 ;
cout<<"\nDeleting the second last element of the linked list\n";
list.deleteSecondLast(n);
list.displayList();
return 0;
}
Comments