В циклическом списке поле связи последнего узла указывает на начало списка, как это изображено на рис. 7.
Рис.7 Циклический список
Циклический список обычно представлен в программе указателем на хвост (Tail), так как получить в этом случае указатель на начало не представляет труда. Для циклических списков становятся простыми операции сцепления и расщепления. Рис. 8 иллюстрирует операцию расщепления по узлу P. Пунктиром изображено изменение связей после операции.
Рис.8 Расщепление списка
На языке СИ это может быть записано следующим образом:
NODE *x;
x=P->Next;
P->Next=Tail->Next;
Tail->Next=x;
Нетрудно заметить, что операция выполняет обмен местами указателей P->Next и Tail->Next. Следовательно, повторное применение той же операции приведет к сцеплению списков. Операция работает как кнопочный выключатель.
Пример. Сложение многочленов
В этом примере исходными данными являются два многочлена от трех переменных:


Априорно известно, что лишь немногие из коэффициентов этих полиномов отличны от нуля. Если воспользоваться прямоугольными массивами для хранения коэффициентов многочленов, то, во-первых, основной объем памяти будет потрачен на хранение нулей, а, во-вторых, основное время работы алгоритма будет потрачено на сложение с нулем и умножение на нуль.
В данном примере полином представлен линейным односвязным циклическим списком с головой. Структура узла имеет вид :
struct NODE{