倒數第K個結點

14.輸入一個鏈表,輸出該鏈表中倒數第K個結點。

本題從1開始計數

  設置兩個指針,因爲倒數第K的位置與倒數第一的結點位置相距K-1,先讓pointer指針走K-1步,然後讓head與pointer一起往前走,當pointer到達最後一個結點時,head所指的結點就是倒數第K的位置。

    public static ListNode findKthToTail(ListNode head, int k) {

        // 輸入的鏈表不能爲空,並且k大於0
        if (k < 1 || head == null) {
            return null;
        }

        // 指向頭結點
        ListNode pointer = head;

        // 倒數第k個結點與倒數第一個結點相隔k-1個位置
        // pointer先走k-1個位置
        for (int i = 1; i < k; i++) {
            // 說明還有結點
            if (pointer.next != null) {
                pointer = pointer.next;
            }
            // 已經沒有節點了,但是i還沒有到達k-1說明k太大,鏈表中沒有那麼多的元素
            else {
                // 返回結果
                return null;
            }

        }

        // pointer還沒有走到鏈表的末尾,那麼pointer和head一起走,
        // 當pointer走到最後一個結點即,pointer.next=null時,head就是倒數第k個結點
        while (pointer.next != null) {
            head = head.next;
            pointer = pointer.next;
        }

        // 返回結果
        return head;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章