Односвязный список

Односвязный список (связный список) — базовая структура, представляющая собой соединение узлов с однотипными данными.
Структура записи

listitem :
item: type, //type - тип хранимых данных
Plink : listitem; // указатель на следующий элемент списка
listitem :
item: type, //type - тип хранимых данных
Plink : listitem; // указатель на следующий элемент списка
listitem :
item: type, //type - тип хранимых данных
Plink : listitem; // указатель на следующий элемент списка
Структура для работы с односвязным списком

Структура списка
type
singlelistilist:
first:listitem,
last: listitem,
head: listitem,
var
list:singlelistite
type
singlelistilist:
first:listitem,
last: listitem,
head: listitem,
var
list:singlelistite
type
singlelistilist:
first:listitem,
last: listitem,
head: listitem,
var
list:singlelistite
Функция иницилизации
func singlelistitem->init
list.first:= NULL;
list.last:= NULL;
list. head:= NULL;
end;
func singlelistitem->init
list.first:= NULL;
list.last:= NULL;
list. head:= NULL;
end;
func singlelistitem->init
list.first:= NULL;
list.last:= NULL;
list. head:= NULL;
end;
Добавление элемента в конец списка

func singlelistlist->addItemBefore(item:type)
i:listitem := new listitem;
i->item := item;
i->Plink := NULL;
if first = NULL then
first := i;
last := i;
end;
else
last.Plink := i;
last := i;
end;
func singlelistlist->addItemBefore(item:type)
i:listitem := new listitem;
i->item := item;
i->Plink := NULL;
if first = NULL then
first := i;
last := i;
end;
else
last.Plink := i;
last := i;
end;
func singlelistlist->addItemBefore(item:type)
i:listitem := new listitem;
i->item := item;
i->Plink := NULL;
if first = NULL then
first := i;
last := i;
end;
else
last.Plink := i;
last := i;
end;
Добавление элемента в начало списка

func singlelistlist->addItemAfter(item:type)
i:listitem := new listitem;
i->item := item;
i->Plink := NULL;
if first = NULL then
first := i;
last := i;
end;
else
i->Plink := first;
first := i;
end;
func singlelistlist->addItemAfter(item:type)
i:listitem := new listitem;
i->item := item;
i->Plink := NULL;
if first = NULL then
first := i;
last := i;
end;
else
i->Plink := first;
first := i;
end;
func singlelistlist->addItemAfter(item:type)
i:listitem := new listitem;
i->item := item;
i->Plink := NULL;
if first = NULL then
first := i;
last := i;
end;
else
i->Plink := first;
first := i;
end;
Удаление элемента с начала списка

func singlelistlist->deleteItemAfter
t:listItem;
t:=first;
if first <> nil then
first:=t->PLink;
first.PLink:=NULL;
delete t;
head:=first;
end;
else
list.first:= NULL;
list.last:= NULL;
list. head:= NULL;
end;
end;
func singlelistlist->deleteItemAfter
t:listItem;
t:=first;
if first <> nil then
first:=t->PLink;
first.PLink:=NULL;
delete t;
head:=first;
end;
else
list.first:= NULL;
list.last:= NULL;
list. head:= NULL;
end;
end;
func singlelistlist->deleteItemAfter
t:listItem;
t:=first;
if first <> nil then
first:=t->PLink;
first.PLink:=NULL;
delete t;
head:=first;
end;
else
list.first:= NULL;
list.last:= NULL;
list. head:= NULL;
end;
end;
Удаление элемента с конца списка

func singlelistlist->deleteItemBefore
l,d: listitem;
l := first;
while l.Plink <> NULL do
d:=l;
l:=l.Plink;
end;
d.Plink:=NULL;
dispose(l);
end;
func singlelistlist->deleteItemBefore
l,d: listitem;
l := first;
while l.Plink <> NULL do
d:=l;
l:=l.Plink;
end;
d.Plink:=NULL;
dispose(l);
end;
func singlelistlist->deleteItemBefore
l,d: listitem;
l := first;
while l.Plink <> NULL do
d:=l;
l:=l.Plink;
end;
d.Plink:=NULL;
dispose(l);
end;
Примеры реализации
Примеры реализации у меня в ребозитории на GitLab
- На C++ : Link;
- На Free Pascal Link