天天看點

輸入一個單連結清單,輸出該連結清單的倒數第K個結點

輸出單連結清單的倒數第K個結點

分析:

首先如果連結清單為空,則不存在第K個結點;如果K小于0,則也不存在倒數第K個結點。對于K大于數組長度的也不存在第K個結點。

接下來是定義兩個結點,一個fast,一個slow。既然是求倒數第K個 結點,那麼先讓快的走K-1步,然後快的和慢的一起走。等到快的走到尾結點的時候,這個時候慢的就走到了倒數第K個結點。

輸入一個單連結清單,輸出該連結清單的倒數第K個結點

程式如下:

public Node FindKthToTail(int k) {
        if (this.head == null || k <= 0) {    //k>getLength(),之是以不想把這個判斷條件放在if語句裡面,原因是不想多周遊一次單連結清單。在後面按進行判斷
            return null;  //倒數第0個結點,就是null
        }
        Node fast = this.head;
        Node slow = this.head;
        while (k - 1 > 0) {  //在此處對k>getLength()進行判斷。(隐含的對getLength進行判斷)
            if (fast.next != null) {
                fast = fast.next;
                k--;
            } else {
                System.out.println("沒有這結點");
                return null;
            }
        }
        //前提條件是fast.next不為空,這樣slow和fast才能一起走
        while (fast.next != null) {
            slow = slow.next;
            fast = fast.next;
        }
        return slow;
    }
           

繼續閱讀