Some operations on doubly linked list...
1.Reversal
void reverse(struct node **ps)
{
struct node *temp,*temp2;
temp=*ps;
if(temp->next==NULL)
return;
while(temp!=NULL)
{
temp2=temp;
temp=temp->next;
temp2->next=temp2->prev;
temp2->prev=temp;
}
*ps=temp2;
}
2.Leave k nodes and then delete k nodes repeatedly..
void del(struct node **ps,int k)
{
struct node *temp,*temp1,*temp2;
int i;
temp=*ps;
while(temp!=NULL)
{
i=0;
while(i!=k)
{
temp=temp->next;
i++;
if(temp==NULL)
break;
}
if(i==k)
{
for(i=0;i<k;i++)
{
if(temp==NULL)
break;
temp1=temp;
temp=temp->next;
if(temp1->next!=NULL)
(temp1->next)->prev=temp1->prev;
(temp1->prev)->next=temp1->next;
free(temp1);
}
}
}
}
1.Reversal
void reverse(struct node **ps)
{
struct node *temp,*temp2;
temp=*ps;
if(temp->next==NULL)
return;
while(temp!=NULL)
{
temp2=temp;
temp=temp->next;
temp2->next=temp2->prev;
temp2->prev=temp;
}
*ps=temp2;
}
2.Leave k nodes and then delete k nodes repeatedly..
void del(struct node **ps,int k)
{
struct node *temp,*temp1,*temp2;
int i;
temp=*ps;
while(temp!=NULL)
{
i=0;
while(i!=k)
{
temp=temp->next;
i++;
if(temp==NULL)
break;
}
if(i==k)
{
for(i=0;i<k;i++)
{
if(temp==NULL)
break;
temp1=temp;
temp=temp->next;
if(temp1->next!=NULL)
(temp1->next)->prev=temp1->prev;
(temp1->prev)->next=temp1->next;
free(temp1);
}
}
}
}