I have written code to append, prepend and update a linked list using c++. But I am unable to figure out the problem. Can anyone help me to run it. I will be grateful for the favor.
The code is pasted below:
#include<iostream>
using namespace std;
class node {
public:
int data;
node *Next;
int key;
node() {
data = 0;
Next = NULL;
key = 0;
}
node(int d, int k) {
data=d;
key=k;
}
// constructor overloading used
};
//create single link list class
class linkedList : public node
{
public:
node *head;
linkedList() {
head = NULL;
}
linkedList( node *nn ) { //new node = nn (stores the address of next node in head)
head = nn;
}
// first operation to check wether node already exist or not (node duplication)
node *nodeExist( int k)
{
node *temp = head; //temporary pointer(stores head node address)
node *ptr = head; //used to jump from one node to next during comparison; starts form head
while( ptr != NULL) {
if(ptr -> key == k) {
temp = ptr;
}
ptr= ptr -> Next; //statement to jump to next node
}
return temp; //temp value may be null(if null not match with any node) or address of a node(matching occur)
}
// function to add new node
void appendNode(node *nn)
{
//check uniqueness of node
if( nodeExist(nn -> key) != NULL ) {
cout<<"key is matching with existing node(try again with different address)"<<endl;
}
//check if linked list is empty or have nodes
else if(head == NULL) {
head = nn;
}
else {
node *ptr = head; //pointer starts jumping from head
while( ptr -> Next != NULL)
{
ptr = ptr -> Next; //statement to jump to next node or update ptr
}
ptr -> Next = nn; //stores the address of new node
}
}
void display()
{
if(head == NULL) {
cout<<"list is empty";
}
else {
node *ptr = head;
while( ptr != NULL )
{
cout<< ptr -> key << "," <<ptr-> data; //print key and data of node
ptr = ptr -> Next;
}
}
}
// add node at start of linked list
void prepend(node *nn)
{
if (nodeExist ( nn -> key) != NULL ) {
cout<<"key is matching with existing node";
}
else {
nn -> Next = head; //store new node reference in head
head = nn; //head stores new node address / update head
}
}
// update node value
void updateNode(int k, int d) // k stores key of node to find and d stores new data value
{
// int k, d;
node *ptr = nodeExist(k);
if( ptr = NULL ) {
ptr -> data = d; //update existing node data with new data
}
else {
cout<<"node does not exist";
}
}
};
int main()
{
linkedList l;
node n(85,7);
int data;
int key;
int d;
int k;
int oper;
do {
cout<<"\nPress"<<endl;
cout<<"[0] to exit"<<endl;
cout<<"[1] to append a node"<<endl;
cout<<"[2] to prepend a node"<<endl;
cout<<"[3] to update a node"<<endl;
cout<<"[4] to display"<<endl;
cin>>oper;
switch(oper)
{
case 0:
cout<<"PROGRAM ENDED!!!!";
break;
case 1:
cout<<"ADD DATA VALUE OF NODE: ";
cin>>data;
cout<<"ADD KEY OF NODE: ";
cin>>key;
l.appendNode();
break;
case 2:
cout<<"ADD DATA VALUE OF NODE: ";
cin>>data;
cout<<"ADD KEY OF NODE: ";
cin>>key;
l.prepend();
break;
case 3:
cout<<"enter key of node to update: ";
cin>>k;
cout<<"enter new data value: ";
cin>>d;
l.updateNode();
break;
case 4:
cout<<"nodes are: "<<endl;
l.display();
break;
}
}while (oper != 0);
}