劍指offer 14 鍊錶中倒數第 k 個結點

2021-10-19 07:25:05 字數 1141 閱讀 2098

14. 鍊錶中倒數第 k 個結點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點

快指標先走 k 步,等快指標到達尾部時,慢指標所指結點即是倒數第 k 個結點

1 public class solution 

7 listnode fast = head;

8 listnode low = head;

9 for(int i = 0; i < k; i++)

13 fast = fast.next;

14 }

15

16 while(fast != null)

20 return low;

21 }

22 }

leetcode執行時間為 0ms, 空間為36.6mb

1 class solution 

11 cnt++;

12 }

13 if(cnt < k)else

18 }

19 }

leetcode執行時間為1ms, 空間為:37.3mb

時間複雜度:o(n)

空間複雜度:o(1)

第一次遍歷鍊錶統計鍊錶長度,再次遍歷鍊錶,遍歷到的第len - k個結點即是倒數第k個結點。注意鍊錶為空和 k 超出鍊錶長度的特殊情況

1 class solution 

11 12 // 如果鍊錶長度小於k, 直接返回null

13 if(len < k)

16 17 // 再次遍歷鍊錶,遍歷到的第len - k個結點即是倒數第k個結點

18 p = head;

19 for(int i = 0; i < len - k; i++)

22 return p;

23 }

24 }

leetcode執行時間為0ms, 空間為37.1mb

劍指Offer (14)鍊錶中倒數第k個結點

題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。實現如下 最後乙個節點定義為倒數第乙個節點 1 2 3 4 5 p s p s eg.尋找倒數第3個節點 k 1 2 要想一次遍歷找到倒數第k個節點,關鍵在於最後乙個節點與倒數第k個節點之間相差k 1個節點 所以要保證兩個指標之間一直保持k 1個節...

劍指offer 14 鍊錶中倒數第k個結點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。兩個指標,先讓第乙個指標和第二個指標都指向頭結點,然後再讓第乙個指正走 k 1 步,到達第k個節點。然後兩個指標同時往後移動,當第乙個結點到達末尾的時候,第二個結點所在位置就是倒數第k個節點處。public class listnode public cla...

劍指offer14 鍊錶中倒數第k個結點

題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。解決思路 1.備份初始結點 2.計數結點個數 3.判斷是否超出 4.正序遍歷得到第count k個結點 public class solution if countreturn null for int i 0 i這種方法比較笨拙,相當於正序遍歷了...