天天看點

連結清單中倒數第k個結點(java)

題目描述

輸入一個連結清單,輸出該連結清單中倒數第k個結點。

如果該連結清單長度小于k,請傳回空。

輸入:{1,2,3,4,5},1

輸出:{5}

快慢指針:快指針先走k步後慢指針開始走,快指針next為空時,慢指針所指的節點就是倒數第k個節點

public ListNode FindKthToTail(ListNode pHead, int k) {
        if (pHead == null || k < 0) return pHead;
        int count = 1;
        ListNode p = pHead;
        while (p.next != null) {
            count++;
            p = p.next;
        }
        if (k > count) return null;

        ListNode fast = pHead;
        ListNode slow = pHead;

        for (int i = 0; i < k; i++) {
            fast = fast.next;
        }
        //快慢指針一起走,快指針指向null時,慢指針剛好指向倒數第K個節點
        while (fast != null) {
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }