@@ -181,7 +181,71 @@ var removeNthFromEnd = function(head, n) {
181181 return ret .next ;
182182};
183183```
184+ TypeScript:
185+
186+ 版本一(快慢指针法):
187+
188+ ``` typescript
189+ function removeNthFromEnd(head : ListNode | null , n : number ): ListNode | null {
190+ let newHead: ListNode | null = new ListNode (0 , head );
191+ let slowNode: ListNode | null = newHead ,
192+ fastNode: ListNode | null = newHead ;
193+ for (let i = 0 ; i < n ; i ++ ) {
194+ fastNode = fastNode .next ;
195+ }
196+ while (fastNode .next ) {
197+ fastNode = fastNode .next ;
198+ slowNode = slowNode .next ;
199+ }
200+ slowNode .next = slowNode .next .next ;
201+ return newHead .next ;
202+ };
203+ ```
204+
205+ 版本二(计算节点总数法):
206+
207+ ``` typescript
208+ function removeNthFromEnd(head : ListNode | null , n : number ): ListNode | null {
209+ let curNode: ListNode | null = head ;
210+ let listSize: number = 0 ;
211+ while (curNode ) {
212+ curNode = curNode .next ;
213+ listSize ++ ;
214+ }
215+ if (listSize === n ) {
216+ head = head .next ;
217+ } else {
218+ curNode = head ;
219+ for (let i = 0 ; i < listSize - n - 1 ; i ++ ) {
220+ curNode = curNode .next ;
221+ }
222+ curNode .next = curNode .next .next ;
223+ }
224+ return head ;
225+ };
226+ ```
227+
228+ 版本三(递归倒退n法):
229+
230+ ``` typescript
231+ function removeNthFromEnd(head : ListNode | null , n : number ): ListNode | null {
232+ let newHead: ListNode | null = new ListNode (0 , head );
233+ let cnt = 0 ;
234+ function recur(node ) {
235+ if (node === null ) return ;
236+ recur (node .next );
237+ cnt ++ ;
238+ if (cnt === n + 1 ) {
239+ node .next = node .next .next ;
240+ }
241+ }
242+ recur (newHead );
243+ return newHead .next ;
244+ };
245+ ```
246+
184247Kotlin:
248+
185249``` Kotlin
186250fun removeNthFromEnd (head : ListNode ? , n : Int ): ListNode ? {
187251 val pre = ListNode (0 ).apply {
0 commit comments