Typing Course

Feedback
Settings
AccuracySpeedTimeErrors

100%

0WPM

0CPM

0s

0/0

fun <T> computeCycleStartNode(list: ListNode<T>): Pair<Boolean, ListNode<T>?> {⏎
var pointer1Distance = 0⏎
// Find cycle⏎
while (true) {⏎
pointer2 = pointer2?.next⏎
if (pointer2 == pointer1 || pointer2?.next == null) break⏎
pointer2 = pointer2.next⏎
if (pointer2 == pointer1 || pointer2?.next == null) break⏎
pointer1 = pointer1?.next ?: break⏎
++pointer1Distance⏎
}⏎
// Find cycle start⏎
if (pointer1 == pointer2) {⏎
// Count nodes in cycle⏎
var cycleDistance = 0⏎
do {⏎
pointer2 = pointer2?.next?.also {⏎
++cycleDistance⏎
}⏎
} while (pointer2 != null && pointer2 != pointer1)⏎
if (cycleDistance > 0) {⏎
cycleExists = true⏎
var pointer3: ListNode<T>? = list⏎
while (cycleDistance > pointer1Distance) {⏎
--cycleDistance⏎
pointer2 = pointer2?.next⏎
}⏎
while (pointer1Distance > cycleDistance) {⏎
--pointer1Distance⏎
pointer3 = pointer3?.next⏎
}⏎
// Now pointer3 and pointer2 are⏎
// the same distance from pointer1.⏎
while (pointer2 != pointer3) {⏎
pointer2 = pointer2?.next⏎
pointer3 = pointer3?.next⏎
}⏎
cycleStart = pointer2⏎
}⏎
}⏎
return Pair(cycleExists, cycleStart)⏎
}⏎
`~
1!
2@
3#
4$
5%
6^
7&
8*
9(
0)
-_
=+
backspace
tab
q
w
e
r
t
y
u
i
o
p
[{
]}
\|
capslock
a
s
d
f
g
h
j
k
l
;:
'"
enter
lshift
z
x
c
v
b
n
m
,<
.>
/?
rshift
fn
ctrl
lalt
lmeta
space
rmeta
ralt