I have been trying this problem on SPOJ.
I have been getting run-time error (SIGSEGV) but the code works perfectly on my computer can someone tell me what is my mistake?
#include<stdio.h>
#include<stdlib.h>
struct node
{
struct node * next;
int x;
};
int main()
{
struct node *head,*temp,*temp2;
int i,a[400],top=2;
a[0]=2;a[1]=3;
head=(struct node*) malloc(sizeof(struct node));
head->x=5;
head->next=NULL;
temp=head;
for(i=7;i<3000;i++)
{
if(i%3!=0)
{
temp->next=(struct node*) malloc(sizeof(struct node));
temp=temp->next;
temp->x=i;
temp->next=NULL;
}
i++;
}
temp=head;
while(head!=NULL)
{
temp=head;
while(temp!=NULL)
{
for(i=1;i<head->x;i++)
{
if(temp==NULL)
{break;}
else
temp=temp->next;
}
if(temp!=NULL)
{
temp2=temp->next;
if(temp2!=NULL)
{
temp->next=temp->next->next;
free(temp2);
}
}
}
a[top]=head->x;
top++;
temp2=head;
head=head->next;
free(temp2);
}
while(1)
{
scanf("%d",&i );
if(i!=0)
printf("%d\n",a[i-1]);
else
break;
}
return 0;
}