Помощь - Поиск - Пользователи - Календарь
Полная версия: Не удаляется первый элемент односвязного списка.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
alex457
Не удаляется первый элемент односвязного списка. Немогу понять в чем проблема. Подскажите, буду очень благодарен.


procedure DeleteItem(Num:integer);
var q:list;
begin
t:=lst;
while t^.Key <> Num do t:= t^.Next;
q:=t^.Next;
t^.Next := q^.Next;
Dispose(q);
end;

Федосеев Павел
Ты уверен, что удаляемый элемент (q) имеет ключ равный Num?
          q:=t^.Next;        <------- Вот в этом месте
t^.Next := q^.Next;
Dispose(q);
alex457
Цитата(Федосеев Павел @ 29.04.2012 22:12) *

Ты уверен, что удаляемый элемент (q) имеет ключ равный Num?
          q:=t^.Next;        <------- Вот в этом месте
t^.Next := q^.Next;
Dispose(q);



Когда первую запись удаляешь, зацикливание идет. Какой нить пример бы мне. А то я в списках слабоват пока что
Федосеев Павел
для начала напиши процедуру без учёта особенности первого элемента.
А затем улучши - проверь, если это 1-й элемент (т.е. lst указывает на него) - например по ключу, тогда меняй и lst.
-------------------
Я вспомнил. Есть красивая реализация. Вместо такого удаления - просто копируешь в текущий t^(который хотел удалить) все значения из следующего t^.Next (если он не NIL). А потом следующий и удаляешь. Так сохраняется целостность структуры списка. Смотри пример в нашем FAQ."http://forum.pascalnet.ru/index.php?showtopic=2706"
alex457
Спасибо большое. Буду смотреть.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.