Display problem after deletion in linked list in C

Posted by LuckySlevin on Stack Overflow See other posts from Stack Overflow or by LuckySlevin
Published on 2010-05-17T15:44:26Z Indexed on 2010/05/17 16:00 UTC
Read the original article Hit count: 201

Filed under:
|
|

Hi, actually this was another problem but it changed so I decided to open a new question.

My code is

typedef struct inner_list 
{
 int count;
 char word[100];
 inner_list*next;
} inner_list;
typedef struct outer_list
{
 char word [100];
 inner_list * head;
 int count;
 outer_list * next; 
} outer_list;
void delnode(outer_list **head,char num[100])//thanks to both Nir Levy and Jeremy P.
{
    outer_list *temp, *m;
    m=temp=*head; /*FIX #1*/
    while(temp!=NULL) {
        if(strcmp(temp->word,num)==0) {
            if(temp==*head) {
                delinner(temp->head); /* FIX#2 */
    *head=temp->next;

                free(temp);
                return;
            } else {
                delinner(temp->head); /* FIX#2 */ 
    m->next=temp->next;

                free(temp);
                return;
            }
        } else {
            m=temp;
            temp= temp->next;
        }
    }
    printf(" ELEMENT %s NOT FOUND ", num);
}
void delinner(inner_list *head) { /* FIX#2 */
    inner_list *temp;
    temp=head;
    while(temp!=NULL) {
        head=temp->next;
        free(temp);
        temp=head;
    }
}
void delnode2(outer_list *up,inner_list **head,char num[100])
{
    inner_list *temp2,*temp, *m;
 outer_list *p;
 p = up;

 while(p!=NULL){m=temp=temp2=p->head; 
    while(temp!=NULL) {
        if(strcmp(temp->word,num)==0) {
            if(temp==(*head)) {
                *head=temp->next;

                free(temp);
                return;
            } else {
                m->next=temp->next;
                free(temp);
                return;
            }
        } else {
            m=temp;
            temp= temp->next;
        }
    }
 p=p->next;
 }
    printf(" ELEMENT %s NOT FOUND ", num);
}
void print_node(outer_list *parent_node) 
{ 


 while(parent_node!=NULL){
 printf("%s\t%d\t", parent_node->word, parent_node->count);

    inner_list *child_node = parent_node->head;
 printf("list: ");
 if(child_node ==NULL){printf("BUARADA");}

 while (child_node != NULL) {
  printf("%s-%d", child_node->word,child_node->count);

        child_node = child_node->next;

        if (child_node != NULL) {
            printf("->");
        }
 }
    printf("\n");
 parent_node = parent_node->next;
 }
}

While deleting an element from outer list I am also trying the delete the same element from inner_list too.

For example: - Let's say aaa is an element of outer_list linked list and let's point it with outer_list *p - This aaa can also be in an inner_list linked list too. (it can be in p->head or another innerlist.) Now, the tricky part again. I tried to apply the same rules with outer_list deletion but whenever i delete the head element of inner_list it gives an error. Where is the wrong thing in print_node or delnode2?

© Stack Overflow or respective owner

Related posts about c

    Related posts about linked-list