Given a linked list, remove the nth node from the end of list and return its head.
For example,
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
用两个指针,s和f。让f先前进n步,这时候有两种情况:
1.f=null,那说明n就等于这个链表的长度,因此要删除的是头指针。return head.next
2.f!=null。这时将f和s以同样的速度前移,直到f到达链表的最后一位,即f.next=null。此时s的位置处于要被删除的node的前一位,即倒数第n+1为。s.next=s.next.next即可。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode s = head;
ListNode f = head;
for(int i = 1; i <= n; i++){
f = f.next;
}
//if f == null, then the first node is to be deleted
if(f == null)
return head.next;
else{
while(f.next != null){
f = f.next;
s = s.next;
}
s.next = s.next.next;
}
return head;
}
}