@@ -188,18 +188,20 @@ TypeScript:
188
188
``` typescript
189
189
function removeNthFromEnd(head : ListNode | null , n : number ): ListNode | null {
190
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 ;
191
+ // 根据leetcode题目的定义可推断这里快慢指针均不需要定义为ListNode | null。
192
+ let slowNode: ListNode = newHead ;
193
+ let fastNode: ListNode = newHead ;
194
+
195
+ while (n -- ) {
196
+ fastNode = fastNode .next ! ; // 由虚拟头节点前进n个节点时,fastNode.next可推断不为null。
195
197
}
196
- while (fastNode .next ) {
198
+ while (fastNode .next ) {// 遍历直至fastNode.next = null, 即尾部节点。 此时slowNode指向倒数第n个节点。
197
199
fastNode = fastNode .next ;
198
- slowNode = slowNode .next ;
200
+ slowNode = slowNode .next ! ;
199
201
}
200
- slowNode .next = slowNode .next .next ;
201
- return newHead .next ;
202
- };
202
+ slowNode .next = slowNode .next ! .next ;// 倒数第n个节点可推断其next节点不为空。
203
+ return newHead .next ;
204
+ }
203
205
```
204
206
205
207
版本二(计算节点总数法):
0 commit comments