給定一個鏈表,刪除鏈表的倒數第 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;
}