Я пытаюсь понять удаление узлов из связанных списков, поэтому я сделал функцию Node *deleteNode(int item. Node *head)
, показанную ниже. Он удаляет узел, но не тот, который я указал в моей основной функции. Если я начинаю со связанного lsit (1,2,3,4,5,6), он возвращает список (1,3,4,5,6). Поэтому по какой-то причине он всегда удаляет 2-й узел. Какая ошибка в моей функции deleteNode вызывает это?Удаление узла из связанного списка в C
ответ
Вам нужно действительно подумать о том, как работает ваш список, чтобы удалить узел. Я бы определенно рассмотрел возможность удаления нескольких фрагментов из вашего deleteNode, чтобы он стал более плавным. Пожалуйста, обратите внимание на следующее:
Node *deleteNode(int item, Node *head){
Node * current = head, *pTemp = NULL, *pPrev = NULL;
while((current->link->info != item) && ((current -> link != NULL)) //You want to traverse the list until you find the item.
{
pPrev = current; // Assign previous pointer which is null to head of list and so on.
current = current->link // Assign current pointer to next node.
}
if (current->link-> info == item)
{
pTemp = current; // Assign temp pointer to current pointer
current = pTemp->link; // set current to next pointer
pPrev->link = current; // set previous pointer to current
free (pTemp)
}
else
{
// Did not find at all in list.
}
return head;
}
Это все обобщается и на лету, пожалуйста отладки кода и написать на бумаге структуру вашего списка.
С помощью связанных списков и поиска с указателями и узлами очень важно, чтобы вы знали, какой указатель указывает на что и каков общий макет ваших связанных списков. Когда я пытаюсь объяснить это кому-то, я часто рисую картину на своей доске. Просто нарисуйте небольшую диаграмму с помощью некоторых узлов и указателей, соединяющих их. Таким образом вы очень быстро видите, какие указатели вы должны перенаправить на другие узлы, чтобы удалить узел из списка.
вкратце: с рисунком очень ясно, что делать, а кодирование не является на самом деле, если вы знаете, что делать.
- 1. Удаление узла из связанного списка в C
- 2. Удаление узла из одного связанного списка C
- 3. Удаление узла из связанного списка
- 4. Удаление узла из связанного списка
- 5. Удаление узла из связанного списка
- 6. Удаление узла в конце связанного списка C++
- 7. Удаление связанного узла списка в C++
- 8. Удаление узла из связанного списка в Java
- 9. Удаление узла из связанного списка указателя
- 10. Удаление единственного узла связанного списка
- 11. Удаление узла из связанного списка по индексу
- 12. Удаление узла из связанного списка LUT?
- 13. Удаление узла из начала связанного списка
- 14. Удаление узла из середины связанного списка
- 15. Удаление узла из концов связанного списка
- 16. Удаление узла из одного связанного списка
- 17. Удаление узла из дважды связанного списка
- 18. Удаление определенного узла из связанного списка - python
- 19. Удаление узла из связанного списка не работает
- 20. Удаление узла из круглого двойного связанного списка
- 21. Удаление узла из динамически связанного списка
- 22. Удаление узла из дважды связанного списка
- 23. Удаление узла из дважды связанного списка?
- 24. Удаление узла Kth из конца связанного списка
- 25. Удаление узла из середины связанного списка
- 26. «Удаление» узла из функционального связанного списка
- 27. Удаление узла из связанного списка (стек)
- 28. Удаление конечного узла из связанного списка
- 29. Удаление первого узла из связанного списка в C
- 30. Удаление узла, который содержит строку из связанного списка в C
Вы пытались использовать отладчик? Hint '=' не то же самое, что '==' – clcto
спасибо @clcto – user3195991
Кроме того, в 'deleteNode' вы никогда не изменяете' head'. Итак, что происходит, когда вы пытаетесь удалить заголовок своего списка? Вы вернете ту же «голову», что и раньше (узел, который вы только что удалили). Вам нужно обработать случай, когда вы удалите заголовок списка. – JS1