class ĠCircular List < T > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġroot : ĠNode < T >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtail : ĠNode < T >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsize Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġsize (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert ToEnd ( data : ĠT ): ĠNode < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġsize ++ ĊĠĠĠĠĠĠĠ Ġval Ġnode : ĠNode < T > Ġ= ĠNode ( data ) ĊĠĠĠĠĠĠĠ Ġif Ġ( root Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Ġ= Ġnode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot ?. next Ġ= Ġroot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot ?. prev Ġ= Ġroot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtail Ġ= Ġroot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtail ?. next Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġnode . prev Ġ= Ġtail ĊĠĠĠĠĠĠĠ Ġnode . next Ġ= Ġroot ĊĠĠĠĠĠĠĠ Ġtail Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġroot ?. prev Ġ= Ġtail ĊĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Root (): ĠNode < T >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert After ( node : ĠNode < T >, Ġdata : ĠT ): ĠNode < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewNode : ĠNode < T > Ġ= ĠNode ( data ) ĊĠĠĠĠĠĠĠ ĠnewNode . next Ġ= Ġnode . next ĊĠĠĠĠĠĠĠ ĠnewNode . prev Ġ= Ġnode ĊĠĠĠĠĠĠĠ Ġnode . next Ġ= ĠnewNode ĊĠĠĠĠĠĠĠ ĠnewNode . next ?. prev Ġ= ĠnewNode ĊĠĠĠĠĠĠĠ Ġif Ġ( node Ġ=== Ġtail ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtail Ġ= ĠnewNode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot ?. prev Ġ= Ġtail ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠnewNode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsplit Next ( node A : ĠNode < T >, Ġnode B : ĠNode < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġnode A . next Ġ= Ġnode B ĊĠĠĠĠĠĠĠ Ġnode B . prev Ġ= Ġnode A ĊĠĠĠĠĠĠĠ Ġroot Ġ= Ġnode A ĊĠĠĠĠĠĠĠ Ġtail Ġ= Ġnode A . prev ĊĠĠĠ Ġ} Ċ }