Удаление элемента из списка
Пусть имеется связный список из трех чисел: 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), каждый раз выводя новый список на экран. Интерфейс: Создание списка Первое число: -12 Следующее число: 17 Следующее число: -3 Следующее число: 5 Следующее число: 0 Введено чисел: 4 Введенные числа: 5 -3 17 -12 Удаление элементов из списка Удаляемый элемент: 17 Новый список: 5 -3 -2 -12 Удаляемый элемент: 5 Новый список: -3 -2 -12 ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|