How to traverse singly linked list as like a doubly linkedlist:
That is given a linked list we need traverse till end and then traverse back to start :
note:for all my programs assume head node is available
Algorithm:
Every time maintain previous node address and then do XOR operation with current next then move forword do same process till u find current next as null then make previous as null again then traverse
back by using XOR operation of next with previous
Code:
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
struct node
{
int data;
struct node *next;
}*head=NULL;
//for my appliction i need to insert some elements in to linked list that is why im writing insert //function
void insert(struct node *head,int i)
{
struct node *temp,*q;
if(head->next==NULL)
{
temp=(struct node *)malloc(sizeof(struct node));
temp->data=i;
temp->next=NULL;
head->next=temp;
printf("inserted when head is null");
}
else
{
temp=(struct node *)malloc(sizeof(struct node));
temp->data=i;
temp->next=NULL;
q=head;
while(q->next!=NULL)
q=q->next;
q->next=temp;
printf("inserted when head is not null");
}
}//end of insert
void display(struct node *head)
{
struct node *temp;
temp=head->next;
while(temp!=NULL)
{
printf("%d ",temp->data);
temp=temp->next;
}
}
void backtrack(struct node *head)
{
struct node *temp,*prev,*q;
temp=head;
prev=NULL;
while(temp!=NULL)
{
q=temp;
printf("%d ",temp->data);
temp=temp->next;
q->next=((int)(q->next))^((int)(prev));
prev=q;
}
temp=prev;
prev=NULL;
printf("\t");
while(temp!=head)
{
printf("%d ",temp->data);
temp->next=((int)(temp->next))^((int)(prev));
prev=temp;
temp=temp->next;
}
printf("%d",temp->data);
}
void main()
{
int i=1,j;
struct node *head;
head=(struct node *)malloc(sizeof(struct node));
head->next=NULL;
while(i)
{
printf("\nenter 1 to insert elements ");
printf(" \n 2 display");
printf("\n 3 traverse linked list front and back again");
printf("\n 0 to exit");
scanf("%d",&i);
switch(i)
{
case 1:printf("enter element");
scanf("%d",&j);
insert(head,j);
break;
case 2:display(head);
break;
case 3:backtrack(head->next);
break;
}
}
}
No comments:
Post a Comment