Взгляните на алгоритм Роллара Полларда . Это не совсем та же проблема, но, может быть, вы поймете ее логику и примените ее к связанным спискам.
(если вы ленивы, вы можете просто проверить обнаружение цикла - проверьте часть черепахи и зайца.)
Для этого требуется только линейное время и 2 дополнительных указателя.
В Java:
boolean hasLoop( Node first ) {
if ( first == null ) return false;
Node turtle = first;
Node hare = first;
while ( hare.next != null && hare.next.next != null ) {
turtle = turtle.next;
hare = hare.next.next;
if ( turtle == hare ) return true;
}
return false;
}
(Большинство решений не проверяют как для next
, так и для next.next
для нулей. Кроме того, поскольку черепаха всегда отстает, вам не нужно проверять ее на нуль - заяц сделал это уже. )
Использование разделения вокруг «,», чтобы отделить слова, а затем снова разделить их «:», чтобы сформировать ключи и значения конечного объекта.
var string = "value:50,type:doctor";
var obj = string.split(",").reduce((acc,ele) => {
let key = ele.split(":")[0];
let value = ele.split(":")[1];
acc[key] = value;
return acc;
}, {});
console.log(obj);