package Ġlinked lists Ċ Ċ class ĠNode ( val Ġvalue : ĠInt , Ġvar Ġnext : ĠNode ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Node ( value =$ value , Ġnext =$ next )" ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠLinkedList Ġ{ ĊĊĠĠĠ Ġvar Ġnode : ĠNode ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġfun Ġadd Last ( new Node : ĠNode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( node Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ= ĠnewNode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent : ĠNode ? Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġwhile Ġ( current !!. next Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcurrent . next ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent . next Ġ= ĠnewNode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint All () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent : ĠNode ? Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġwhile Ġ( current Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( current ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcurrent . next ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Duplicates (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġmutable Set Of < Int >() ĊĠĠĠĠĠĠĠ Ġvar ĠcurrentNode : ĠNode ? Ġ= Ġnode Ġ?: Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( currentNode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( set . contains ( currentNode . value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . add ( currentNode . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentNode Ġ= ĠcurrentNode . next ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrints Ġfrom Ġk th Ġindex Ġto Ġlast ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsub List From ( begin Index : ĠInt ): ĠList < Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Node >() ĊĠĠĠĠĠĠĠ Ġvar ĠcurrentNode : ĠNode ? Ġ= Ġnode Ġ?: Ġreturn Ġempty List < Node >() ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( currentNode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( begin Index Ġ== Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( currentNode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentNode Ġ= ĠcurrentNode . next ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete At ( index : ĠInt ): ĠNode ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠcurrentNode : ĠNode ? Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( currentNode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ- Ġ 1 Ġ== Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeletion Node Ġ= ĠcurrentNode . next ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentNode . next Ġ= Ġdeletion Node ?. next ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdeletion Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentNode Ġ= ĠcurrentNode . next ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġreverse (): ĠLinkedList Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠcurrentNode : ĠNode ? Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġvar Ġreversed Node : ĠNode ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwhile Ġ( currentNode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcloned Ġ= ĠNode ( currentNode . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reversed Node Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreversed Node Ġ= Ġcloned ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreversed Node . next Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcloned . next Ġ= Ġreversed Node ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreversed Node Ġ= Ġcloned ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentNode Ġ= ĠcurrentNode . next ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠLinkedList () ĊĠĠĠĠĠĠĠ Ġif Ġ( reversed Node Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add Last ( reversed Node ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġnode At ( index : ĠInt ): ĠNode ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠcurrentNode : ĠNode ? Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( currentNode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠcurrentNode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentNode Ġ= ĠcurrentNode . next ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ }