给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
static int num;
public static ListNode removeNthFromEnd(ListNode head, int n) {
if (n != 0) {
num = n;
//递归
int sum = removeNthFromEnd(head);
//如果链表长度==n,那么在地柜里面还没做删除操作,直接把原始链表头去掉就行
if (sum == n) {
return head.next;
}
}
return head;
}
public static int removeNthFromEnd(ListNode head) {
//如果递归到链表尾,计数返回0
if (head == null) {
return 0;
}
//否则递归后返回
int count = removeNthFromEnd(head.next);
//如果返回数字==n,那么当前节点是带删除节点的前置节点,做删除操作
if (count == num) {
head.next = head.next.next;
}
return count + 1;
}