class ĠLinkedList < T > Ġ{ ĊĠĠĠ Ġclass ĠNode < T >( val Ġvalue : ĠT , Ġvar Ġnext : ĠNode < T >? Ġ= Ġnull ) ĊĊĠĠĠ Ġvar Ġhead : ĠNode < T >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtail : ĠNode < T > ĊĊĠĠĠ Ġfun Ġinsert ( item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( head Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtail Ġ= ĠNode ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhead Ġ= Ġtail ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtail . next Ġ= ĠNode ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtail Ġ= Ġtail . next !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdetect Loop (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġslow Pointer Ġ= Ġhead ?. next ĊĠĠĠĠĠĠĠ Ġvar Ġfast Pointer Ġ= Ġhead ?. next ?. next ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( slow Pointer Ġ!= Ġnull Ġ&& Ġfast Pointer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slow Pointer Ġ== Ġfast Pointer ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslow Pointer Ġ= Ġslow Pointer . next ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfast Pointer Ġ= Ġfast Pointer . next ?. next ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġforce Loop () Ġ{ ĊĠĠĠĠĠĠĠ Ġtail . next Ġ= Ġhead ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġlink edList Ġ= ĠLinkedList < Int >() ĊĠĠĠ Ġlink edList . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġinsert ( 1 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" link edList Ġhas Ġloop : Ġ" Ġ+ Ġlink edList . detect Loop ()) ĊĊĠĠĠ Ġlink edList . force Loop () ĊĠĠĠ Ġprintln (" link edList Ġhas Ġloop : Ġ" Ġ+ Ġlink edList . detect Loop ()) Ċ }