Потому что, если у вас есть такой список (например):
head -> A -> B -> C -+
^ |
+-------+
и код для его обхода следующим образом:
node = head
while node <> null:
processNode(node)
node = node.next
тогда вы никогда не завершите цикл. Он будет радостно обрабатывать A, B, C, B, C, B, C,...
вечность (или пока не наступит тепловая смерть вселенной, в зависимости от того, что наступит раньше).
Обычный связанный список никогда не будет иметь цикл . Чтобы обнаружить такой вырожденный список, вы можете посмотреть этот ответ .
Обратите внимание, что некоторые циклически связанные списки действительно действительны. Одним из примеров, которые я видел, был список процессов, используемый для планирования, когда голова и хвост не имеют значения (поскольку объект, который их обрабатывает , хотел , чтобы зациклить их навсегда). Следовательно, планировщик будет выглядеть примерно так:
curr = somePointInList()
while true:
runForABit(curr)
curr = curr.next