很简单的一道题,用两个指针遍历一遍链表。利用count保证两个指针间的距离为n,即当前一指针遍历完链表后,后一指针恰巧在倒数第n+1个位置上。这里需要考虑两种情况:
1. 若链表长即为n,那么后一指针为null,返回的应该是head.next(倒数第n个是head)
2. 否则,将后一指针的next赋为后一指针next.next(即跳过倒数第n个,将其从链表中删除),返回此时的head
/**
* 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 t1 = head;
ListNode tn = null;
int count=0;
while( t1!=null )
{
if( count == n )
{
tn = head;
}
else if( count > n )
{
tn = tn.next;
}
t1 = t1.next;
count++;
}
if( tn == null )
{
return head.next;
}
tn.next = tn.next.next;
return head;
}
}