删除链表的倒数第 N 个节点

删除链表的倒数第 N 个节点

1. 题目描述

提示
题目链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/

2. 解题思路

核心总结

  • 核心思想:快慢指针解法。让 fast 先走 n+1 步,然后 fastslow 同时走。当 fast 到达末尾时,slow 刚好指向被删除节点的前一个位置。

💡 易错点

为了方便删除,一定要定位到“被删节点的前一个节点”,建议引入虚拟头节点处理 n == length 的情况。

3. 代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**

* Definition for singly-linked list.

* public class ListNode {

* int val;

* ListNode next;

* ListNode() {}

* ListNode(int val) { this.val = val; }

* ListNode(int val, ListNode next) { this.val = val; this.next = next; }

* }

*/

class Solution {

public ListNode removeNthFromEnd(ListNode head, int n) {

ListNode dummy = new ListNode(0,head);

ListNode fast = dummy;

ListNode slow = dummy;

for(int i = 0; i <= n; i++){

fast = fast.next;

}

while(fast != null){

fast = fast.next;

slow = slow.next;

}

slow.next = slow.next.next;

return dummy.next;

}

}

4. 复杂度分析

  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(1)$

5. 总结与反思


本文已被观测了
« 上一篇 主页 下一篇 »