Моя проблема заключается в удалении узла из связанного списка.Удаление узла из связанного списка в C
У меня есть два: Структуры
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;
Моя проблема заключается в удалении узла из outer_list связанного списка. Например, когда пользователь entered aaa
удаляет, delete function should find the node with outer_list->word = aaa and delete this node and reconnect the list again
. Я попробовал приведенный ниже код, чтобы сделать это. но после обнаружения и удаления я теряю список. Я не знаю, что случилось. Обратите внимание, что внешний_list также имеет связанный список inner_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;
}
}
Теперь моя проблема обновлена. При удалении элемента из внутреннего списка я также пытаюсь удалить один и тот же элемент из inner_list.
Например: aaa - это элемент связанного списка outer_list, и давайте укажем его с помощью external_list * p - Этот aaa также может быть связан также со списком, связанным с inner_list. (он может быть в p-> голове или другом внутреннем списке.) Теперь сложная часть снова. Я попытался применить те же правила с удалением внешнего_имени, но всякий раз, когда я удаляю элемент head_list, он дает ошибку. Вот что я пробовал:
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);
}
Здесь я пытаюсь отправить узел и проверить все inner_lists из outer_list элементов и выполнить удаление, однако, когда первый элемент удаляется он выходит из строя. Пожалуйста, запросите дополнительную информацию. Я мог бы использовать очень неопрятные слова.
Вашей второй фрагмент кода неловко отступа. Вы можете это исправить? – Lucas
Извините. Я починю это. – LuckySlevin