Deleting a middle node from a single linked list when pointer to the previous node is not available

前端 未结 24 1389
陌清茗
陌清茗 2020-11-29 20:42

Is it possible to delete a middle node in the single linked list when the only information available we have is the pointer to the node to be deleted and not the pointer to

24条回答
  •  一个人的身影
    2020-11-29 21:00

    The following code will create a LL, n then ask the user to give the pointer to the node to be deleted. it will the print the list after deletion It does the same thing as is done by copying the node after the node to be deleted, over the node to be deleted and then delete the next node of the node to be deleted. i.e

    a-b-c-d

    copy c to b and free c so that result is

    a-c-d

    struct node  
    {
        int data;
        struct node *link;
     };
    
    void populate(struct node **,int);
    
    void delete(struct node **);
    
    void printlist(struct node **);
    
    void populate(struct node **n,int num)
    {
    
        struct node *temp,*t;
        if(*n==NULL)
        {
            t=*n;
            t=malloc(sizeof(struct node));
            t->data=num;
            t->link=NULL;
            *n=t;
        }
        else
        {
            t=*n;
            temp=malloc(sizeof(struct node));
            while(t->link!=NULL)
                t=t->link;
            temp->data=num;
            temp->link=NULL;
            t->link=temp;
        }
    }
    
    void printlist(struct node **n)
    {
        struct node *t;
        t=*n;
        if(t==NULL)
            printf("\nEmpty list");
    
        while(t!=NULL)
        {
            printf("\n%d",t->data);
            printf("\t%u address=",t);
            t=t->link;
        }
    }
    
    
    void delete(struct node **n)
    {
        struct node *temp,*t;
        temp=*n;
        temp->data=temp->link->data;
        t=temp->link;
        temp->link=temp->link->link;
        free(t);
    }    
    
    int main()
    {
        struct node *ty,*todelete;
        ty=NULL;
        populate(&ty,1);
        populate(&ty,2);
        populate(&ty,13);
        populate(&ty,14);
        populate(&ty,12);
        populate(&ty,19);
    
        printf("\nlist b4 delete\n");
        printlist(&ty);
    
        printf("\nEnter node pointer to delete the node====");
        scanf("%u",&todelete);
        delete(&todelete);
    
        printf("\nlist after delete\n");
        printlist(&ty);
    
        return 0;
    }
    

提交回复
热议问题