又是找不到自己什么时候写过这道题
快慢指针写法,以及预先指针pre的定义
/**
* 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);
pre.next = head;
ListNode fast = new ListNode();
ListNode slow = new ListNode();
fast = pre;
slow = pre;
for(int i=0; i<n; i++) fast = fast.next;
while(fast.next!=null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return pre.next;
}
}
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head == null) return null;
ListNode fast = head;
ListNode block = new ListNode(0);
block.next = head;
ListNode slow = block;
for(int i=0; i<n; i++){
fast = fast.next;
}
while(fast != null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
/*System.out.println(head.val);
System.out.println(block.val);
System.out.println(block.next.val); //因为slow指向的是block
System.out.println(slow.val);*/
return block.next;
}
}