很简单的题目。
public static ListNode removeNthFromEnd(ListNode head, int n) {
if (head != null && n > 0)
{
ListNode p1 = head, p2 = head, preP1 = p1;
int nn = n-1;
// 两个指针间隔为 n-1 个步长
while (nn > 0)
{
p2 = p2.next;
nn--;
}
// 第二个指针移动到最后一个位置
// 删除p1位置
while (p2.next != null)
{
preP1 = p1;
p2 = p2.next;
p1 = p1.next;
}
// 当删除的是头节点的时候,这两个值本身就相等
if (preP1.next != p1.next)
{
preP1.next = p1.next;
return head;
}
else
return head.next;
}
else
return null;
}