题目:力扣
思路:
删除链表的倒数第N个节点,我们就需要删除的节点的之前那个节点,这样才可以删除。
我们可以采用双指针法,一个快指针,一个慢指针,因为我们需要知道删除的节点之前那个节点,所以我们让快指针和慢指针之间保持n+1个节点,(n是倒数第n个节点)。
先让快指针走n+1步,然后快指针和慢指针一起走,终止条件是当快指针为空的时候,就终止。
代码:
/**
* 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 dummyNode = new ListNode(0, head);
ListNode fastNode = dummyNode;
ListNode slowNode = dummyNode;
for (int i = 0; i <= n; i++) {
fastNode = fastNode.next;
}
while (fastNode != null) {
fastNode = fastNode.next;
slowNode = slowNode.next;
}
slowNode.next = slowNode.next.next;
return dummyNode.next;
}
}