Thread: whenever i delete a node and call display loop runs infinitely

  1. #1
    Registered User
    Join Date
    Sep 2012
    Posts
    1

    Question whenever i delete a node and call display loop runs infinitely

    //program to implement lists through liked list

    incert
    Code:
    #include<stdio.h>
    #include<malloc.h>
    struct node{
    int data;
    struct node *next;
     };
    void incert(int num,node *pointer)
       {
       while(pointer->next!=NULL)
       pointer=pointer->next;
       pointer->next=(node *)malloc(sizeof(node));
       pointer=pointer->next;
       pointer->data=num;
       pointer->next=NULL;
       }
    void display(node *pointer)
    {
         while(pointer->next!=NULL)
        {
            printf("%d->",(pointer->next)->data);
            pointer=pointer->next;
         }
         printf("\n");
    }
    void del(int num,node *pointer)
    {
        while(((pointer->next)->data!=num)&&(pointer->next!=NULL))
        {
            
            pointer=pointer->next;
         }
         
         
            if(pointer->next==NULL)
            
                     printf("element not found");
                     
            else
                {
                     node *t;
                     t=(node *)malloc(sizeof(node));
                     t=pointer->next;
                     pointer=t->next;
                     free(t);
                 }
        
        return;
    }
    
    
    main()
    {    int num,choice;
        struct node *start,*temp;
        start=(node *)malloc(sizeof(node));
        temp=start;
        temp->next=NULL;
        while(choice!=4)
         {
                  printf("enter choice number\n");
                  printf("1)add an element\n2)delete an element\n3)display list\n4)to exit");
                  scanf("%d",&choice) ;
                  
                 if(choice==1)
                      {    printf("enter element to be added");
                           scanf("%d",&num);
                           incert(num,temp);
                            printf("\n");
                      }
                 else if(choice==2)
                 {
                    printf("enter the data to be deleted");
                    scanf("%d",&num);
                    del(num,start);
                 }
            
                 else if(choice==3)
                          display(start);
        
                 else if(choice==4)
                          break;
    
    
                 else
                          printf("wrong choice");
         }
    }

  2. #2
    Registered User
    Join Date
    Jan 2009
    Posts
    1,485
    I don't really follow what you are doing in your del function. The else clause assumes that you have found the target node that you are about to delete, why are you allocating a new node there? It's also a memory leak by the way because you immediately assign a new value to t after you have allocated memory to it.

    All you need to do, fitting with your existing code is to hold on to the present node->next and then re-link node->next->next to node->next. Example:

    Code:
    void *target = pointer->next;
    pointer->next = pointer->next->next;
    free(target);
    You should refer to your node data type as struct node btw, not just node in function prototypes and so on.
    Last edited by Subsonics; 09-30-2012 at 12:08 AM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Delete olnly the last node
    By std10093 in forum C Programming
    Replies: 2
    Last Post: 01-13-2011, 12:21 PM
  2. delete last node
    By bazzano in forum C Programming
    Replies: 4
    Last Post: 05-02-2007, 08:08 AM
  3. BST - delete node
    By marrk in forum C Programming
    Replies: 5
    Last Post: 12-20-2006, 10:46 AM
  4. Delete node
    By AmazingRando in forum C Programming
    Replies: 1
    Last Post: 09-23-2003, 04:44 PM
  5. Delete node!!!!!
    By khpuce in forum C Programming
    Replies: 3
    Last Post: 05-31-2003, 06:33 AM

Tags for this Thread