#include<iostream>
using namespace std;
struct ListNode{
int value;
ListNode * next;
};
ListNode * deleteNode(ListNode * head,int i){
ListNode *p=head,*s;
for(int j=2;j<i;j++)
{
p=p->next;
}
s=p->next;
p->next=s->next;
free(s);
return head;
}
void InsertNode(ListNode * head,int data,int i){
ListNode * p=head;
for(int j=2;j<i;j++){
p=p->next;
}
ListNode * s=new ListNode;
s->value=data;
s->next=p->next;
p->next=s;
}
ListNode * Reverse(ListNode * p,ListNode * & head){
if(p->next==NULL)
{head=p;
return p;
}
else
{
ListNode *s=Reverse(p->next,head);
s->next=p;
p->next=NULL;
return p;
}
}
ListNode * createList(int a[],int n){
ListNode *head;
ListNode *s=new ListNode;
s->value=a[0];
head=s;
for(int i=1;i<n;i++){
ListNode * nex=new ListNode;
nex->value=a[i];
s->next=nex;
s=nex;
}
s->next=NULL;
return head;
}
void Bubble(ListNode * &head){
for(ListNode * s=head;s!=NULL;s=s->next){
for(ListNode* j=head;j->next!=NULL;j=j->next)
{
if(j->value>j->next->value)
{int temp=j->next->value;
j->next->value=j->value;
j->value=temp;}
}
}
}
void Print(ListNode * head){
for(ListNode * s=head;s!=NULL;s=s->next){
cout<<s->value<<' ';
}
cout<<endl;
}
int main() {
int a[]={
3,2,5,4,1
};
int len=sizeof(a)/sizeof(int);
ListNode *head=createList(a,len);
ListNode *first=Reverse(head,head);
Print(head);
ListNode * m=deleteNode(head,3);
Print(m);
InsertNode(head,5,3);
Print(head);
Bubble(head);
Print(head);
}