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