【刷leetcode】13.連結串列中倒數第k個節點
阿新 • • 發佈:2020-12-22
技術標籤:刷題
題目描述
思路
下標從0開始,設連結串列中的元素個數為n。
倒數第1個節點的下標是n-1,倒數第2個節點的下標是n-2,… 倒數第k個節點的下標是n-k。
設定兩個指標,一個指標比另一個指標先移動k次。然後它們倆一起向後移動。
先移動的指標指向null時,此時下標為n,那麼後移動的指標此時的下標為n-k。
後移動的指標此時正好指向了倒數第k個節點。(_)
程式碼
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
//1.設定兩個雙指標,初始都指向頭節點
ListNode pre = head; //前指標
ListNode cur = head; //後指標
//2.讓前指標向後移動k個節點
for(int i=0; i<k; i++){
pre = pre.next;
}
//3.前後指標開始一起向後移動,直到前指標指向null
while(pre != null){
pre = pre.next;
cur = cur.next;
}
//4.此時後指標指向倒數第k個節點
return cur;
}
}
複雜度分析
時間複雜度:O(n) 前指標一共走了n步,後指標一共走了(n-k)步
空間複雜度:O(1) 兩個指標使用了常數大小的額外空間