@@ -69,9 +69,15 @@ export class LinkedList<E> {
6969 oldFirst . prev = newNode ;
7070 }
7171 this . _size += 1 ;
72- return this . _remove . bind ( this , newNode ) ;
73- }
7472
73+ let didRemove = false ;
74+ return ( ) => {
75+ if ( ! didRemove ) {
76+ didRemove = true ;
77+ this . _remove ( newNode ) ;
78+ }
79+ } ;
80+ }
7581
7682 shift ( ) : E | undefined {
7783 if ( this . _first === Node . Undefined ) {
@@ -94,38 +100,30 @@ export class LinkedList<E> {
94100 }
95101
96102 private _remove ( node : Node < E > ) : void {
97- let candidate : Node < E > = this . _first ;
98- while ( candidate !== Node . Undefined ) {
99- if ( candidate !== node ) {
100- candidate = candidate . next ;
101- continue ;
102- }
103- if ( candidate . prev !== Node . Undefined && candidate . next !== Node . Undefined ) {
104- // middle
105- const anchor = candidate . prev ;
106- anchor . next = candidate . next ;
107- candidate . next . prev = anchor ;
108-
109- } else if ( candidate . prev === Node . Undefined && candidate . next === Node . Undefined ) {
110- // only node
111- this . _first = Node . Undefined ;
112- this . _last = Node . Undefined ;
113-
114- } else if ( candidate . next === Node . Undefined ) {
115- // last
116- this . _last = this . _last ! . prev ! ;
117- this . _last . next = Node . Undefined ;
118-
119- } else if ( candidate . prev === Node . Undefined ) {
120- // first
121- this . _first = this . _first ! . next ! ;
122- this . _first . prev = Node . Undefined ;
123- }
124-
125- // done
126- this . _size -= 1 ;
127- break ;
103+ if ( node . prev !== Node . Undefined && node . next !== Node . Undefined ) {
104+ // middle
105+ const anchor = node . prev ;
106+ anchor . next = node . next ;
107+ node . next . prev = anchor ;
108+
109+ } else if ( node . prev === Node . Undefined && node . next === Node . Undefined ) {
110+ // only node
111+ this . _first = Node . Undefined ;
112+ this . _last = Node . Undefined ;
113+
114+ } else if ( node . next === Node . Undefined ) {
115+ // last
116+ this . _last = this . _last ! . prev ! ;
117+ this . _last . next = Node . Undefined ;
118+
119+ } else if ( node . prev === Node . Undefined ) {
120+ // first
121+ this . _first = this . _first ! . next ! ;
122+ this . _first . prev = Node . Undefined ;
128123 }
124+
125+ // done
126+ this . _size -= 1 ;
129127 }
130128
131129 iterator ( ) : Iterator < E > {
0 commit comments