题目地址:https://oj.leetcode.com/problems/remove-nth-node-from-end-of-list/
方法:利用快慢指针,首先快指针比慢指针快n个节点,然后快慢指针同时往后走,快指针走到NULL时,慢指针的位置就是需要删除的节点位置。
遇到链表题目的一个技巧,利用dummy节点,令dummy.next=head 最后返回dummy.next,这样就可以在删除节点的时候方便考虑,每个节点都有前置节点,当删除头节点的时候无需特殊考虑(无需保持住头结点)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head==null)return null;
ListNode dummy=new ListNode(0);
ListNode fast = head;
ListNode low = head;
ListNode pre = dummy;
dummy.next=head;
while((n--)>0){
fast=fast.next;
}
while(fast!=null){
fast=fast.next;
pre = low;
low=low.next;
}
pre.next=low.next;
return dummy.next;
}
}