#c #linked-list
#c #связанный список
Вопрос:
Я написал два метода удаления данного узла, и я думаю, что они одинаковы. Однако они дают разный результат.
Первый,
node *q = c->next;
c->data = q->data; second: c->data = c->next->data;
c->next = q->next; c->next = c->next->next;
delete q; delete c->next;
Я пробую пример (связанный список: 1,2,3,4,5,6,7,8,9,10 и c ==3)
первый метод выдает результат: 1,2,4,5,6,7,8,9,10, чего я и хочу
но второй дает: 1,2,4,-572662307 Я не могу понять, в чем разница.
Комментарии:
1. Во втором вы изменили
c->next
наc->next->next
и потеряли то, на чтоc->next
ранее указывали.2. Можете ли вы конкретно объяснить, в какой момент c-> next теряется
3. Возьмите немного бумаги и карандаш и нарисуйте, что происходит в каждом случае.
4. я понял, мне следует сделать перерыв после целого дня кодирования…
Ответ №1:
Существенное отличие заключается в том, что после первого, c->next
будет указываться на то, что было раньше (до алгоритма) c->next->next
. После второго, c->next
будет указывать на удаленный узел.
Другое отличие заключается в том, что первое удаляет то, что было c->next
до алгоритма, в то время как второе удаляет узел, который был c->next->next
до алгоритма.