package Ġlesson 3 Ċ Ċ /** Ċ Ġ* ĠÐŃ ÑĤ Ð¾ÑĤ ĠÐºÐ»Ð°ÑģÑģ ĠÐ² Ð¾Ñģ Ð¿ÑĢ Ð¸Ð½ Ð¸Ð¼ Ð°ÑĤÑĮ ĠÑĤÐ¾Ð»ÑĮÐºÐ¾ ĠÐºÐ°Ðº ĠÐ¿ÑĢ Ð¸Ð¼ÐµÑĢ . Ċ Ġ*/ Ċ class ĠSample Iterable Collection < T > Ġ: ĠAbstract Mutable Collection < T >() Ġ{ ĊĊĠĠĠ Ġprivate Ġclass ĠNode < T >( val Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnext : ĠNode < T >? Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġstart : ĠNode < T >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġvar Ġsize Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( element : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġstart ĊĠĠĠĠĠĠĠ Ġstart Ġ= ĠNode ( element ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġprev ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsize ++ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠMutable Iterator < T > Ġ= ĊĠĠĠĠĠĠĠ ĠSample Iterator () ĊĊĠĠĠ Ġinner Ġclass ĠSample Iterator Ġ: ĠMutable Iterator < T > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent : ĠNode < T >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfind Next (): ĠNode < T >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( current Ġ!= Ġnull ) Ġcurrent ?. next Ġelse Ġstart ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfind Next () Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġfind Next () Ġ?: Ġthrow ĠNoSuch ElementException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent !!. value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ?: Ġthrow ĠNoSuch ElementException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġ== Ġstart ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġstart !!. next ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprevious Ġ= Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( previous Ġ!= Ġnull Ġ&& Ġprevious . next Ġ!= Ġcurrent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Ġ= Ġprevious . next ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Ġ?: Ġthrow ĠNoSuch ElementException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious . next Ġ= Ġcurrent !!. next ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize -- ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }