劍指offer(十四)——鏈表中倒數第k個結點
題目描述
輸入一個鏈表,輸出該鏈表中倒數第k個結點。
題解
public static ListNode FindKthToTail(ListNode head,int k) {
ListNode postNode = null;
ListNode preNode = null;
if (k <= 0) {
return postNode;
}else {
int flag = 0;
postNode = head;
preNode = head;
while(preNode != null) {
if (++flag > k) {
postNode = postNode.next;
}
preNode = preNode.next;
}
return k <= flag ? postNode : null;
}
講一下思路,就是設兩個指針–前指針preNode和後指針postNode指向頭結點head,前指針先移動,後指針等到前指針移動了k個結點後纔開始移動,那麼前指針遍歷完整個鏈表時,後指針指向的便是倒數第k個結點。
注意k值大於整個鏈表長度的情況!
下面以k=2爲例。
當pre指針到第2結點,post指針開始移動
當pre指針到到達終點時,post指針即爲倒數第二個結點