A) Проход по списку с проверкой текущего элемента
p:=Head; {Установка текущего указателя на начало списка}
while (p<>nil) and (p^.inf<>A) do
begin
Oper(p); {Какая-либо операция над текущим элементом}
p:=p^.next {Переход к следующему элементу списка}
end;
Данный проход можно использовать:
• Для поиска определенного элемента, тогда в заголовок цикла добавляется соответствующее условие, например, (p^.inf<>A), (p^.inf>0) и т.п. Если элемент найден, p указывает на него. Если не найден, p=nil.
• Для выполнения какой-либо операции над элементами (вывод, суммирование, проверка на максимальность и т.д.). Тогда в тело цикла добавляются операторы или вызов подпрограммы для реализации этой операции.
B) Проход по списку с проверкой наличия элемента, следующего за текущим элементом
p:=Head;
while (p^.next<>nil) do
p:=p^.next;
После выхода из цикла p указывает на последний элемент.
Данный проход можно использовать для вставки элемента в конец списка и перед последним элементом.
C) Проход по списку с двумя указателями
pred:=nil; {pred указывает на предшествующий элемент}
p:=Head; {p – на текущий элемент}
while (p<>nil) and (p^.inf<>A) do
begin
Oper(p);{Какая-либо операция над элементами списка}
pred:=p;
p:=p^.next{Переход к следующему элементу списка}
end;
Данный проход можно использовать:
• Для поиска определенного элемента, тогда в заголовок цикла добавляется соответствующее условие, например, (p^.inf<>A), (p^.inf>0) и т.п.
Если элемент найден, p указывает на него, pred – на предшествующий.
Если не найден, p=nil, pred указывает на последний элемент.
• Для выполнения какой-либо операции над текущим и предшествующими элементами (проверка на возрастание и т.д.). Тогда в тело цикла добавляются операторы или вызов подпрограммы для реализации этой операции.
D) Проход по списку с двумя указателями и с проверкой наличия элемента, следующего за текущим
pred:=nil; {pred указывает на предшествующий элемент}
p:=Head; {p – на текущий элемент}
while (p^.next<>nil)do
begin
pred:=p;
p:=p^.next{Переход к следующему элементу списка}
end;
После выхода из цикла p указывает на последний элемент, pred – на предшествующий элемент.
Данный проход можно использовать для удаления последнего элемента.
Вставка элемента после заданного элемента
Исходный список | Список после вставки элемента |
Выполнить проход (a) по списку с проверкой текущего элемента для поиска заданного элемента А.
Если элемент найден, выполнить:
new(q);
q^.inf:=x;
q^.next:=p^.next; //Установка ссылки в новом элементе на элемент, который следовал за элементом А
p^.next:=q; //Установка ссылки в элементе А на новый элемент
end;