https://leetcode.com/problems/delete-node-in-a-linked-list/description/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
Постановка задачи: Учитывая связанный список размером не менее 2, вам дается указатель на один из узлов (гарантированно не являющийся хвостом).Удалить узел.
Связанный список [1,2,3,4], ввод: 2, правильный вывод: [1,3,4]
void deleteNode(ListNode* node) {
ListNode* next = node->next;
*node = *(node->next);
delete next;
}
Выше приведено правильное решение,Тем не менее, я думаю, что это не должно быть правильно.
Причина: во 2-й строке функции вы копируете значение / содержимое всего узла.Таким образом, вы в конечном итоге копируете значение int, а также адрес следующего узла (т. Е. Указатель следующего узла).
Однако в 3-й и последней строке функции вы в конечном итоге удалите следующий (что эквивалентно node-> next).
Если в будущем вы выделите достаточно ресурсов, это не вызовет проблем с перезаписью?Насколько я понимаю, следующий указатель теперь содержит адресное пространство чего-то, что было только что удалено.
Если я ошибаюсь в своем понимании, я был бы очень признателен, если бы кто-то меня поправил.