題目描述
輸入一個鏈表,輸出該鏈表中倒數第k個結點
解題思路
本題的思路和之前看矩形那一題有相似之處,就是我們優先考慮邊界情況,比如本題,我們需要查找鏈表中的倒數第K個節點,那麼想象此時身處鏈表最後的位置,我想要知道前面K個位置的結點.就像是跑步一樣,我先到達終點.但是要保證我每次都要先到達終點,且我和後面的人速度要一致,所以只有我先走了K步,才能始終保證我到達終點時,對手在倒數第K個位置,也就是使用快慢指針來解決此問題.
1:創建倆個指針,快指針先走K步,但是要保證整個鏈表長度大於等於K
2:當快指針走完了K步,此時慢指針處於頭結點位置,然後同步走,知道快指針到達終點
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public class Solution {
public ListNode FindKthToTail(ListNode head, int k) {
ListNode fastK = head;
//快指針先走K步
for (int i = 0; i < k; i++) {
if (fastK == null) {
return null;
}
fastK = fastK.next;
}
//創建慢指針,然後倆個指針同步
ListNode slow = head;
while (fastK != null) {
slow = slow.next;
fastK = fastK.next;
}
return slow;
}
}