leetcode 19. 刪除鏈表的倒數第N個節點 擊敗100%

給定一個鏈表,刪除鏈表的倒數第 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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章