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.
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.
AC代码:
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if( head == null )
return head;
int length = 0;
ListNode p = head;
ListNode q = head;
while( p != null ){
length++;
p = p.next;
}
if( n == length ) return head.next;
p = head;
for( int i=0; i<n; i++ ){
q = q.next;
}
while( q.next != null ){
p = p.next;
q = q.next;
}
p.next = p.next.next;
return head;
}
}