思路:前后指针维持一定的距离,然后维持这个距离一起向前跑步,当前指针到了末尾那么后面那个指针所指向的就是我们要操作的
重点在于yummy指针的预设
/**
* 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 pre= new ListNode(0);
ListNode yummy =pre;
//以下两个指针再外面跑,这个yummy指针留守老家
//这个指针设置的目的是防止 链表只有一个元素 然后就删除那一个元素的情况
pre.next = head;
ListNode ans = pre;
while(n!=0){
pre= pre.next;
n--;
}
while(pre.next!=null){
pre = pre.next;
ans= ans.next;
}
ans.next = ans.next.next;
return yummy.next;
}
}
结果;