Здавалка
Главная | Обратная связь

Удаление элемента из списка



Пусть имеется связный список из трех чисел: 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 Все права принадлежат авторам размещенных материалов.