题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
利用dummynode来解决头节点变化的问题;
fast指针向前进n步,拉开距离;
fast指针到达null,slow即在倒数第n个;
这道题给的n都能找到valid的节点,如果找不到倒数nth node,更改部分代码为:
for (int i = 0; i < n; i++) {
if(fast != null) fast = fast.next;
}
if (fast == null) return head;
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) {
// write code here
ListNode dummy = new ListNode (-1);
dummy.next = head;
ListNode slow = dummy;
ListNode fast = dummy;
for (int i = 0; i < n; i++) {
fast = fast.next;
}
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
ListNode prev = slow;
ListNode toBeDeleted = slow.next;
ListNode next = toBeDeleted.next;
prev.next = next;
toBeDeleted.next = null;
return dummy.next;
}
}
查看5道真题和解析