1. 程式人生 > 其它 >【刷leetcode】13.連結串列中倒數第k個節點

【刷leetcode】13.連結串列中倒數第k個節點

技術標籤:刷題

題目描述

在這裡插入圖片描述

思路

下標從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) 兩個指標使用了常數大小的額外空間