Скажем, у вас есть структура связанного списка в Java. Он состоит из узлов:
class Node {
Node next;
// some user data
}
и каждый узел указывает на следующий узел, за исключением последнего узла, который имеет нулевое значение для следующего. Скажем, есть вероятность, что список может содержать цикл - то есть конечный узел, вместо нуля, имеет ссылку на один из узлов в списке, который предшествовал ему.
Как лучше написать
boolean hasLoop(Node first)
, который вернул бы true
, если данный узел является первым в списке с циклом, а false
в противном случае? Как вы могли бы написать так, чтобы это занимало постоянное количество места и разумное количество времени?
Вот изображение того, как выглядит список с циклом: