鏈表中倒數第k個結點_14

題目描述

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

public class FindKthToTail_14 {
    //雙指針
    public static ListNode_14 FindKthToTail1(ListNode_14 head,int k) {
        ListNode_14 p1, p2;
        p1 = p2 = head;
        int i = 0;
        for (; p1 != null; i++) {
            //從第k步開始,第二個指針也從頭指針開始遍歷,兩個指針距離始終保持在k-1
            //當第一個指針到達鏈表的尾結點時嗎,第二個指針正好是倒數第k個節點
            if (i >= k)
                p2 = p2.next;
            p1 = p1.next;
        }
        return i < k ? null : p2;
    }
    public static ListNode_14 FindKthToTail(ListNode_14 head,int k) {
        int totalNum = 0;
        if(head != null){
            totalNum++;
        }else{
            return null;
        }
        // 計算總的節點數量
        ListNode_14 currentNode = head.next;
        while(currentNode != null){
            totalNum++;
            currentNode = currentNode.next;
        }

        if(totalNum < k){
            //throw new RuntimeException("k的值超過了鏈表長度");
            return null;
        }
        // 倒數第k個爲正數第totalNum-k+1個
        ListNode_14 resultNode = head;
        for(int i=1; i<=totalNum-k; i++){
            resultNode = resultNode.next;
        }
        return resultNode;

    }
    public static void main(String[] args) {
        ListNode_14 root = new ListNode_14(1);
        root.next = new ListNode_14(2);
        root.next.next = new ListNode_14(3);
        root.next.next.next = new ListNode_14(4);
        root.next.next.next.next = new ListNode_14(5);
        ListNode_14 result = FindKthToTail1(root,2);
        System.out.println(result.val);
    }
}

 

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