輸出單連結清單的倒數第K個結點
分析:
首先如果連結清單為空,則不存在第K個結點;如果K小于0,則也不存在倒數第K個結點。對于K大于數組長度的也不存在第K個結點。
接下來是定義兩個結點,一個fast,一個slow。既然是求倒數第K個 結點,那麼先讓快的走K-1步,然後快的和慢的一起走。等到快的走到尾結點的時候,這個時候慢的就走到了倒數第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;
}