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


Автор: Tarantul2007 7.5.2007, 18:25
Нужна процедура удаления элемента из двусвязного списка !

Код

procedure DelEl(var p0:TPList); // p0-указатель на удаляемый элемент
var after:TPList;
begin
if p0=head then begin head:=p0^.next;
                      Dispose(p0);
                      head^.prev:=nil;
                      writeln('Элемент перед удаляемым nil');
                      writeln('Элемент после удаляемого ',head^.data);
                end
           else
if p0^.next=nil then begin after:=p0^.prev;
                           Dispose(p0);
                           after^.next:=nil;
                           writeln('Элемент перед удаляемым ',after^.data);
                           writeln('Элемент после удаляемого nil');
                     end
                else
                begin after:=p0^.next;
                      after^.prev:=head;
                      head^.next:=after;
                      Dispose(p0);
                      writeln('Элемент перед удаляемым ',head^.data);
                      head:=head^.next;
                      writeln('Элемент после удаляемого ',head^.data);
                end;
end;


Я типа пытался что-то сделать но не получается. Получается только для односвязного списка.

Автор: keenara 8.5.2007, 13:55
А разве есть принципиальная разница между удалением из односвязного и удалением из двусвязного? Когда ты удаляешь из односвязного элемент N ты заменяешь у элемента N-1 указатель чтобы он указывал на N+1.
Удаление из двусвязного - АБСОЛЮТНО то же самое, только нужно еще и заменить указатель на ПРЕДЫДУЩИЙ элемент у элемента N-1.
Делается это точно так же.

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