感觉应该算是一道简单题,思路就是使用双指针,两个指针之间差n,一个到终点,另一个是倒数第N个节点,找到倒数第N个的前驱节点删除第N个节点即可。
/**
* 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) {
if(head == null){
return null;
}
ListNode newHead = new ListNode(0);
newHead.next = head;
ListNode p = newHead;
ListNode q = newHead;
while(n!=0){
q = q.next;
n--;
}
while(q.next!=null){
p = p.next;
q = q.next;
}
p.next = p.next.next;
return newHead.next;
}
}