鏈表中倒數第k個結點

題目描述

輸入一個鏈表,輸出該鏈表中倒數第k個結點

解題思路

在這裏插入圖片描述
本題的思路和之前看矩形那一題有相似之處,就是我們優先考慮邊界情況,比如本題,我們需要查找鏈表中的倒數第K個節點,那麼想象此時身處鏈表最後的位置,我想要知道前面K個位置的結點.就像是跑步一樣,我先到達終點.但是要保證我每次都要先到達終點,且我和後面的人速度要一致,所以只有我先走了K步,才能始終保證我到達終點時,對手在倒數第K個位置,也就是使用快慢指針來解決此問題.

1:創建倆個指針,快指針先走K步,但是要保證整個鏈表長度大於等於K
2:當快指針走完了K步,此時慢指針處於頭結點位置,然後同步走,知道快指針到達終點

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}

public class Solution {
    public ListNode FindKthToTail(ListNode head, int k) {
        ListNode fastK = head;
        //快指針先走K步
        for (int i = 0; i < k; i++) {
            if (fastK == null) {
                return null;
            }
            fastK = fastK.next;
        }
        //創建慢指針,然後倆個指針同步
        ListNode slow = head;
        while (fastK != null) {
            slow = slow.next;
            fastK = fastK.next;
        }
        return slow;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章