Three methods are given Below
#include<iostream>
using namespace std;
struct node{
int data;
node *next;
}*tt,*bt;
int count=0;
void insert_head(node **pointerToStart,node **pointerToTail,int n){
node *temp=new node;
temp->data=n;
if(*pointerToStart==NULL){
(*temp).next=*pointerToStart;
*pointerToStart=temp;
*pointerToTail=temp;
count++;
}
else{
(*temp).next=*pointerToStart;
*pointerToStart=temp;
count++;
}
}
void print_list(node** pointerToStart){
node* temp=*pointerToStart;
while(temp!=NULL){
cout<<temp->data<<"->";
temp=temp->next;
}
cout<<"NULL";
}
/* comments starts
void reverse(node** pointerTostart,node *p){
if(p->next==NULL){
*pointerTostart=p;
return;
}
reverse(&*pointerTostart,p->next);
node*q=p->next;
q->next=p;
p->next=NULL;
}
node *reverse(node **pointerToNode){
node* head;
if((*pointerToNode)->next==NULL){
head=*pointerToNode;
return head;
}
node *q=(*pointerToNode)->next;
node *p=*pointerToNode;
head=reverse(&q);
node *temp=p->next;
temp->next=p;
p->next=NULL;
return head;
}
comment ends */
void reverse(node **headRef){
if((*headRef)==NULL){
return;
}
node *rest = (*headRef)->next, *first=*headRef;
if(rest==NULL){
return;
}
reverse(&rest);
first->next->next=first;
first->next=NULL;
(*headRef)=rest;
}
main(){
node *start=NULL,*tail=NULL;
for(int i=1;i<10;i++){
insert_head(&start,&tail,i);
}
print_list(&start);
//reverse(&start,start);
reverse(&start);
cout<<"\n";
print_list(&start);
}
No comments:
Post a Comment