本文最后更新于 1293 天前,其中的信息可能已经有所发展或是发生改变。
思路
利用快慢指针,快指针先走n步,慢指针才开始走,快指针走到终点时,慢指针所在的位置就是倒数n节点。
题目
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
进阶:你能尝试使用一趟扫描实现吗?
示例 1:
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1 输出:[]
示例 3:
输入:head = [1,2], n = 1 输出:[1]
提示:
- 链表中结点的数目为
sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
Related Topics
代码
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode fast = head;
ListNode slow = null;
int i = 1;
while (fast != null) {
if (i == n+1) {
slow = head;
}else if (i>n+1){
slow = slow.next;
}
fast = fast.next;
i++;
}
// 因为slow是删除节点的前一个,所以存在特殊情况
// 一、删除节点是第一个,slow为空,通过长度来判断这种情况
if (i - 1 == n) {
return head.next;
}
// 二。删除节点是头结点之前的,直接返回头结点
if (slow == null) {
return head;
}
// 删除节点slow.next
slow.next = slow.next.next;
return head;
}