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?
Edit: actually if it a outer_list node deleted the linked list of inner_list inside of it should be removed too. This is why delinner method used.
For example:
outer inner
aaa bb->cc
bb aaa->cc
when i wanted to delete "aaa" The result should be:
outer inner
bb cc