Удаление элемента из списка
Пусть имеется связный список из трех чисел: 5, -3, -12.
Список сформирован, и значениями переменных head и q является ссылка на первый элемент списка:
Необходимо удалить из списка элемент -3.
Для удаления (исключения) существующего элемента из списка выполняются следующие действия:
1. указатели q (поисковый) и r (отстает от поискового на шаг) ставим в голову списка:
q := head^.Next; на первый элемент списка
r := head; на указатель на голову списка
2. в списке отыскивается удаляемый элемент, для этого используем поисковый указатель q :
While (q <> Nil) Do пока не дошли до конца списка
If (q^.Inf = -3) если нашли нужный элемент,
Then Break то выходим из цикла поиска,
Else
Begin
r := q; иначеподтягиваем r к q
q := q^.Next; и делаем шаг по списку указателем q
End;
сейчас ссылка q указывает на элемент -3 , то есть q^.Inf = -3, а поле q^.Next содержит адрес элемента -12. Ссылка r указывает на предыдущий элемент списка, то есть на 5, а в r^.Next содержится адрес удаляемого элемента - r^.Next = q :
3. в ссылочное поле r^.Next помещается адрес, хранящийся в q^.Next, то есть адрес элемента -12:
r^.Next := q^.Next;
Сейчас оба элемента (5 и -3) будут соединены с элементом -12,
а связь между элементами 5 и -3 разрывается.
4. освобождаем память от удаленного элемента -3 и возвращаем указатели q и r в голову списка:
Dispose(q); удаляем из памяти элемент -3
q := head^.Next; на первый элемент списка
r := head; на указатель на голову списка
Пример: сформировать список из элементов 5, -3, 17, -12 и вывести его на экран. Удалить из списка несколько элементов (конец удаления – число 0), каждый раз выводя новый список на экран.
Интерфейс:
Дата добавления: 2015-08-08; просмотров: 827;