题解 | #删除链表的倒数第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; } }
日常记录~
#链表删除#