#include<iostream>
using namespace std;
// fun prototype
void create();
void display();
void rev();
void insert();
void insertAtBeg();
void insertAtPos();
void insertAtEnd();
void del();
void delAtBeg();
void delAtEnd();
void delAtPos();
struct node
{
int data;
struct node*next;
};
struct node *head=NULL;
struct node *tail=NULL;
int len=0;
int main()
{
int choice;
while(1)
{
cout<<"\n\n\n\t\t\t\t******MENU********\n\n";
cout<<"\n1 Create firstnode or Append\n2 display\n3 for inserting node\n";
cout<<"4 for length \n5 for deletion \n6 for reversing the list\n";
cin>>choice;
switch(choice)
{
case 1:create();
break;
case 2:display();
break;
case 3:insert();
break;
case 4:cout<<"length of list = "<<len<<"\n";
break;
case 5:del();
break;
case 6: rev();
break;
case 0:exit(1);
break;
default: cout<<" wrong choice\n:";
break;
}
}
}
void insert()
{
int choice;
cout<<"\n\n\n\t\t\t\t\t******MENU********\n";
cout<<"\n1 for insertion At Beg\n2 Insert on a specific Pos\n3 for insert at end\n";
cin>>choice;
switch(choice)
{
case 1:insertAtBeg();
break;
case 2:insertAtPos();
break;
case 3:insertAtEnd();
break;
default: cout<<" wrong choice for inserting\n:";
break;
}
}
void del()
{
int choice;
cout<<"\n\n\n\t\t\t\t\t******MENU********\n\n";
cout<<"\n1 for deletion 1st node \n2 for deletion last node\n3 for deletion at a given pos\n";
cin>>choice;
switch(choice)
{
case 1:delAtBeg();
break;
case 2:delAtEnd();
break;
case 3:delAtPos();
break;
default: cout<<" wrong choice for inserting\n:";
break;
}
}
void create()
{
struct node*newnode;
newnode = new node;
int data;
cout<<"enter data ";
cin>>data;
newnode->data=data;
newnode->next = NULL;
if (head == NULL)
{
head = newnode;
tail = newnode;
//tail->next = head;
cout<<"\n first node created successfully\n";
len++;
}
else
{
tail->next = newnode;
tail = newnode;
//tail->next = head;
cout<<"\n node created successfully\n";
len++;
}
// now for linking tail to head
tail->next = head;
}
void display()
{
//cout<<"in display\n";
struct node *temp;
if(head == NULL)
{
cout<<"empty";
}
else
{
temp=head;
cout<<"head->";
while(temp->next!=head)
{
cout<<temp->data<<"->";
temp=temp->next;
}
cout<<temp->data<<"->head";
//cout<<temp->data;
}
}
void insertAtBeg()
{
struct node*newnode;
newnode = new node;
int data;
cout<<"enter data ";
cin>>data;
newnode->data=data;
newnode->next = NULL;
if(head==NULL)
{
head = newnode;
tail = newnode;
head->next=head;
}
else
{
newnode->next = head;//address of 1st node
head = newnode;
tail->next = head;
}
cout<<"node added successfully";
len++;
}
void insertAtEnd()
{
struct node*newnode;
newnode = new node;
int data;
cout<<"enter data ";
cin>>data;
newnode->data=data;
newnode->next = NULL;
if(head==NULL)
{
cout<<"empty list";
head = newnode;
tail = newnode;
head->next=head;
}
else
{
newnode->next = tail->next;//address of 1st node
tail->next = newnode;
tail = newnode;
}
cout<<"node added successfully";
len++;
}
void insertAtPos()
{
int pos,i;
i=1;
cout<<"enter the pos\n" ;
cin>>pos;
if(pos==1)
{
insertAtBeg();
}
else if(pos == len)
{
insertAtEnd();
}
else if(pos<1 || pos>len)
{
cout<<"invalid pos";
}
else
{
struct node*newnode;
newnode = new node;
struct node*temp;
int data;
cout<<"enter data\n";
cin>>data;
newnode->data=data;
newnode->next = NULL;
temp = tail->next; // point to 1st node
while(i<pos-1)
{
temp=temp->next;
i++;
}
newnode->next = temp->next;
temp->next = newnode;
len++;
}
}
void delAtBeg()
{
struct node*temp;
temp = head;
if(head == NULL)
cout<<"empty list";
else if(len==1)
{
head = NULL;
cout<<"deleted element is -> "<<temp->data;
delete temp;
len--;
}
else
{
head=head->next;
tail->next = head;
cout<<"deleted element is -> "<<temp->data;
delete temp;
len--;
}
}
void delAtEnd()
{
struct node*cur,*prev;
cur = head;
if(head == NULL)
cout<<"empty list";
else if(len==1)
{
head = NULL;
delete cur;
len--;
}
else
{
while(cur->next!=head)
{
prev=cur;
cur=cur->next;
}
//now cur is on last node and prev is on one before
prev->next = head;
tail=prev;
cout<<"deleted element is -> "<<cur->data;
delete cur;
len--;
}
}
void delAtPos()
{
struct node*cur,*nextnode;
int i=1;
int pos;
cur=head;
cout<<"Enter the position ";
cin>>pos;
if(pos<1 || pos>len)
cout<<"invalid";
else if(pos==1)
delAtBeg();
else if(pos==len)
delAtEnd();
else
{
while(i<pos-1)
{
cur = cur->next;
i++;
}
nextnode = cur->next;
cur->next = nextnode->next;
cout<<"Deleted item is "<<nextnode->data;
delete nextnode;
len--;
}
}
void rev()
{
//now for reversing we need 3 pointers
struct node*cur,*prev,*next;
cur = head;
next = cur->next;
if(head == 0)
cout<<"empty\n";
else if(cur->next == cur)
cout<<"only one node\n";
else
{
while(cur!=tail)
{
prev = cur;
cur=next;
next = cur->next;
cur->next = prev;
}
next->next = tail;
tail = next;
head = tail->next;
cout<<"reverse succesfully\n";
}
display();
}
No comments:
Post a Comment