В чем разница между двумя удалениями связанного списка?

#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 до алгоритма.