用进废退是真的,明明看题目就知道是双指针,但是实际操作就写上了最原始的扫两遍,一遍找长度,一边找删除的节点前后切。哎,没头脑且不高兴。
/**
* 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 dummy=new ListNode(0,head);
ListNode pre=dummy;
ListNode cur=dummy.next;
while(--n>0){//倒数第二个的话,其实两节点只要相隔一个节点就好,所以--n
cur=cur.next;
}
while(cur.next!=null){
pre=head;
cur=cur.next;
head=head.next;
}
pre.next=head.next;//当前head是要被删掉的,所以前置节点续head后节点
return dummy.next;
}
}