思路:
利用快慢指针,设置一个间隔,2边同时向后走,停止时慢的指针刚好就在指定位置,并且只走了一趟
代码:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode pre=new ListNode(0);
pre.next=head;
ListNode start=pre;
ListNode end=pre;
while(n!=0){
start=start.next;
n--;
}
while(start.next!=null){
start=start.next;
end=end.next;
}
end.next=end.next.next;
return pre.next;
}
}
分解:
1)利用快慢指针,设置一个间隔,2边同时向后走,停止时慢的指针刚好就在指定位置,并且只走了一趟
复杂度分析:
时间复杂度:O(N)
空间复杂度:O(1)