劍指Offer——鏈表中倒數第 K 個結點

題目描述

輸入一個鏈表,輸出該鏈表中倒數第 k 個結點。
時間限制:1 秒 空間限制:32768K
本題知識點: 鏈表

代碼實現

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindKthToTail(ListNode head, int k) {
        ListNode node = head, temp = head;
        int i = 0;
        for(; node != null; i++){
            if(i >= k){
                temp = temp.next;
            }
            node = node.next;
        }
        return k > i ? null : temp;
    }
}

解題思路

首先我們要知道什么是鏈表,可以通過參考文章底部的推薦文章進行了解。簡單來說就是它有一系列結點組成,每個結點包括一個數據結構(用來存放各類型的數據),還包括一個指向下一個結點的指針。

因為題中給出的鏈表為單鏈表,每個結點只有下一個結點的指針,而沒有前一個結點的指針,所以我們要想知道倒數第 k 個結點,我們首先需要從第一個結點開始一直找到最后一個結點,得到共有多少個結點,然后再算出倒數第 k 個結點是整數第幾個結點,然后再從第一個結點開始直到找到最終要找的結點。

但是我們這里使用的方法很巧妙,我們定義兩個指針都指向第一個結點,然后讓其中一個指針 node 先走 k 步,然后 temp 指針再開始走,直到 node 走到最后,因為 node 比 temp 始終快 k 步,所以最后 temp 指向的結點就是倒數第 k 個結點,不過這里有個前提就是 k 不能大于我們所有結點的總數,如果大于的話,是沒有倒數第 k 個結點的,所以返回空。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容