package Ġcom . ig or wo j da . stack . basic Ċ Ċ import Ġorg . am sh ove . k lu ent . shouldBe EqualTo Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . util .* Ċ Ċ // Ġprivate Ġclass ĠStack < E > Ġ{ Ċ // ĠĠĠ Ġvar Ġelements : ĠList < E > Ġ= Ġempty List () Ċ // ĠĠĠ Ġval Ġsize Ċ // ĠĠĠĠĠĠĠ Ġget () Ġ= Ġelements . size Ċ // Ċ // ĠĠĠ Ġfun Ġadd ( element : ĠE ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġelements Ġ+= Ġelement Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġfun Ġremove (): ĠE ? Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġelements . last OrNull ()?. also Ġ{ Ġelements Ġ-= Ġit Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġfun Ġpeek (): ĠE ? Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġelements . last OrNull () Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġfun ĠisEmpty (): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġelements . isEmpty () Ċ // ĠĠĠ Ġ} Ċ // Ġ} Ċ Ċ private Ġclass ĠStack < E > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġelements : ĠLinkedList < E > Ġ= ĠLinkedList () ĊĠĠĠ Ġval Ġsize ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġelements . size ĊĊĠĠĠ Ġfun Ġadd ( element : ĠE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġelements . add ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove (): ĠE ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( elements . isEmpty ()) Ġnull Ġelse Ġelements . remove Last () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpeek (): ĠE ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelements . last OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠisEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelements . isEmpty () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠTest Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` stack Ġcan Ġadd Ġand Ġremove Ġitems `() Ġ{ ĊĠĠĠĠĠĠĠ ĠStack < Int >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĠshouldBe EqualTo Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĠshouldBe EqualTo Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` stack Ġcan Ġfollows Ġfirst Ġin , Ġlast Ġout `() Ġ{ ĊĠĠĠĠĠĠĠ ĠStack < Int >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĠshouldBe EqualTo Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĠshouldBe EqualTo Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĠshouldBe EqualTo Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` peek Ġreturns Ġthe Ġfirst Ġelement Ġbut Ġdoes Ġnot Ġremove Ġit `() Ġ{ ĊĠĠĠĠĠĠĠ ĠStack < Char >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' A ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' B ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' C ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpeek () ĠshouldBe EqualTo Ġ' C ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĠshouldBe EqualTo Ġ' C ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpeek () ĠshouldBe EqualTo Ġ' B ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĠshouldBe EqualTo Ġ' B ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpeek () ĠshouldBe EqualTo Ġ' A ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĠshouldBe EqualTo Ġ' A ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpeek () ĠshouldBe EqualTo Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĠshouldBe EqualTo Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` new ly Ġcreated Ġstack Ġis Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠ ĠStack < Char >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty () ĠshouldBe EqualTo Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` stack Ġis Ġempty Ġafter Ġremoving Ġall Ġitems `() Ġ{ ĊĠĠĠĠĠĠĠ ĠStack < Char >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' A ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' B ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' C ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpeek () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpeek () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpeek () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty () ĠshouldBe EqualTo Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` stack Ġwith Ġitems Ġis Ġnot Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠ ĠStack < Char >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' A ') ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty () ĠshouldBe EqualTo Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' B ') ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty () ĠshouldBe EqualTo Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' C ') ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty () ĠshouldBe EqualTo Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` stack Ġhas Ġcorrect Ġsize `() Ġ{ ĊĠĠĠĠĠĠĠ ĠStack < Char >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe EqualTo Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' A ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe EqualTo Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' B ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe EqualTo Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (' C ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe EqualTo Ġ 3 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe EqualTo Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe EqualTo Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe EqualTo Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` remove Ġitem Ġfrom Ġempty Ġstack `() Ġ{ ĊĠĠĠĠĠĠĠ ĠStack < Char >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe EqualTo Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ