Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Двусвязный список. Удаление узла.


Автор: Masja 14.1.2007, 23:13
Пожалуйста!!!!
Помогите разобраться! Я заступорилась и никак ни могу домыслить..... Завтра экзамен... Хотелось бы заполнить этот пробельчик.

Вот пример удаления узла из двусвязного линейного списка:

структура узел{указатели на предшественника и последователя, данные узла}

Код

void DeleteUzel(UZEL *p){
p->Left->Right=p->Right;
p->Right->Left=p->Left;
delete p;
}



Растолкуйте мне вот это, что означает:
p->Left->Right

ну никак себе представить ни могу smile

Автор: Rockie 14.1.2007, 23:34
Используя p->Left - получаем элемент стоящий перед p. p->Right - соответственно следующий. У этих элементов также есть указатели на следующий и предыдущий. Таким образом:

Код

void DeleteUzel(UZEL *p)
{
  p->Left->Right=p->Right;   //  указатель на next предыдущего эл-та выставляем на следующий эл-т после p
  p->Right->Left=p->Left;    //  указатель на prev слкдующего эл-та выставляем на предыдущий эл-т перед p
  delete p;                  //  теперь на p уже никто не указывает и p можно удалять
}


    <-p_prev->  <-p->  <-p_next->

после кода:

    <-p_prev-> <-p_next->

Автор: cardinal 14.1.2007, 23:38
В этой теме
http://forum.vingrad.ru/topic-54062/hl/%25D1%2581%25D0%25BF%25D0%25B8%25D1%2581%25D0%25BA/index.html
есть когда то мной нарисованная картинка, которая думаю поможет разобраться в указателях в двусвязном списке...

Добавлено @ 23:38 
Еле нашел, полтора года ведь прошло... smile 

Автор: Masja 14.1.2007, 23:43
Rockie
СПАСИБИЩЕ!!!!!
поняла!

cardinal,
за картиночку  спасибо smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)