题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
1、利用变量副本和dummy节点跳过某个节点
2、比较重要的是利用了len - n 和 len - (len - n) = n 节约时间不用求整个长度
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
public ListNode removeNthFromEnd (ListNode head, int n) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode first = dummy;
ListNode second = dummy;
// 多一个节点,假设len是长度,那么目前first跑的距离是n+1,还剩len - n -1
for (int i = 0; i <= n ; i++) {
first = first.next;
}
// len - (len - n -1) = n + 1 first跑的距离是len - n - 1,second跑的距离也是len - n -1,那剩下的距离是n + 1,所以是倒数的第n + 1个节点
while (first != null) {
first = first.next;
// 会跑在目标的前一个,因为多一个节点
second = second.next;
}
// 利用变量副本把节点跳过一个,n+1的节点操作第n的节点跳过
second.next = second.next.next;
return dummy.next;
}
}
日常记录~
#链表删除#