if(start==NULL)
    {
        tmp->prev=NULL;
       // run  here , the start==null, so the start->prev is error
        start->prev=tmp;//here

        start=tmp;
    }

On 8月1日, 下午8时41分, Rajesh Kumar <testalgori...@gmail.com> wrote:
> programs gives segmentation fault when we creat linked list
> plz help me
>
> #include<stdio.h>
> #include<malloc.h>
> #include<stdlib.h>
> struct node
> {
>     struct node *prev;
>     int info;
>     struct node *next;
>
> }*start;
>
> main()
> {
>     int choice,n,m,po,i;
>     start=NULL;
>     while(1)
>     {
>         printf("1.Create List\n");
>         printf("2.Add at begining\n");
>         printf("3.Add after\n");
>         printf("4.Delete\n");
>         printf("5.Display\n");
>         printf("6.Count\n");
>         printf("7.Reverse\n");
>         printf("8.exit\n");
>         printf("Enter your choice : ");
>         scanf("%d",&choice);
>         switch(choice)
>         {
>          case 1:
>             printf("How many nodes you want : ");
>             scanf("%d",&n);
>             for(i=0;i<n;i++)
>             {
>                 printf("Enter the element : ");
>                 scanf("%d",&m);
>                 create_list(m);
>             }
>             break;
>          case 2:
>             printf("Enter the element : ");
>             scanf("%d",&m);
>             addatbeg(m);
>             break;
>          case 3:
>             printf("Enter the element : ");
>             scanf("%d",&m);
>             printf("Enter the position after which this element is inserted
> : ");
>             scanf("%d",&po);
>             addafter(m,po);
>             break;
>          case 4:
>             printf("Enter the element for deletion : ");
>             scanf("%d",&m);
>             del(m);
>             break;
>          case 5:
>             display();
>             break;
>          case 6:
>             count();
>             break;
>          case 7:
>             rev();
>             break;
>          case 8:
>             exit(1);
>          default:
>             printf("Wrong choice\n");
>     }/*End of switch*/
>    }/*End of while*/
>
> }/*End of main()*/
>
> create_list(int num)
> {
>     struct node *q,*tmp;
>     tmp= malloc(sizeof(struct node));
>     tmp->info=num;
>     tmp->next=NULL;
>     if(start==NULL)
>     {
>         tmp->prev=NULL;
>         start->prev=tmp;
>         start=tmp;
>     }
>     else
>     {
>         q=start;
>         while(q->next!=NULL)
>             q=q->next;
>         q->next=tmp;
>         tmp->prev=q;
>     }
>
> }/*End of create_list()*/
>
> addatbeg(int num)
> {
>     struct node *tmp;
>     tmp=malloc(sizeof(struct node));
>     tmp->prev=NULL;
>     tmp->info=num;
>     tmp->next=start;
>     start->prev=tmp;
>     start=tmp;
>
> }/*End of addatbeg()*/
>
> addafter(int num,int c)
> {
>     struct node *tmp,*q;
>     int i;
>     q=start;
>     for(i=0;i<c-1;i++)
>     {
>         q=q->next;
>         if(q==NULL)
>         {
>             printf("There are less than %d elements\n",c);
>             return;
>         }
>     }
>     tmp=malloc(sizeof(struct node));
>     tmp->info=num;
>     q->next->prev=tmp;
>     tmp->next=q->next;
>     tmp->prev=q;
>     q->next=tmp;
>
> }/*End of addafter() */
>
> del(int num)
> {
>     struct node *tmp,*q;
>     tmp=malloc(sizeof(struct node));
>     if(start->info==num)
>     {
>         tmp=start;
>         start=start->next;  /*first element deleted*/
>         start->prev = NULL;
>         free(tmp);
>         return;
>     }
>     q=start;
>     while(q->next->next!=NULL)
>     {
>         if(q->next->info==num)     /*Element deleted in between*/
>         {
>             tmp=q->next;
>             q->next=tmp->next;
>             tmp->next->prev=q;
>             free(tmp);
>             return;
>         }
>         q=q->next;
>     }
>     if(q->next->info==num)    /*last element deleted*/
>     {   tmp=q->next;
>         free(tmp);
>         q->next=NULL;
>         return;
>     }
>     printf("Element %d not found\n",num);
>
> }/*End of del()*/
>
> display()
> {
>     struct node *q;
>     if(start==NULL)
>     {
>         printf("List is empty\n");
>         return;
>     }
>     q=start;
>     printf("List is :\n");
>     while(q!=NULL)
>     {
>         printf("%d ", q->info);
>         q=q->next;
>     }
>     printf("\n");
>
> }/*End of display() */
>
> count()
> {   struct node *q=start;
>     int cnt=0;
>     while(q!=NULL)
>     {
>         q=q->next;
>         cnt++;
>     }
>     printf("Number of elements are %d\n",cnt);
>
> }/*End of count()*/
>
> rev()
> {
>     struct node *p1,*p2;
>     p1=start;
>     p2=p1->next;
>     p1->next=NULL;
>     p1->prev=p2;
>     while(p2!=NULL)
>     {
>         p2->prev=p2->next;
>         p2->next=p1;
>         p1=p2;
>         p2=p2->prev; /*next of p2 changed to prev */
>     }
>     start=p1;
>
> }/*End of rev()*/
>
> --
> Regards
> Rajesh Kumar

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to