網站首頁 編程語言 正文
題目描述
輸入一個長度為 n 的鏈表,設鏈表中的元素的值為 ai ,返回該鏈表中倒數(shù)第k個節(jié)點。
如果該鏈表長度小于k,請返回一個長度為 0 的鏈表。
數(shù)據(jù)范圍:0<=n<=10^5,0<=ai<=10^9,0<=k<=10^9
要求:空間復雜度O(n),時間復雜度O(n)
進階:空間復雜度O(1),時間復雜度O(n)
例如輸入{1,2,3,4,5},2時,對應的鏈表結構如下圖所示:
其中藍色部分為該鏈表的最后2個結點,所以返回倒數(shù)第2個結點(也即結點值為4的結點)即可,系統(tǒng)會打印后面所有的節(jié)點來比較。
示例
輸入:
{1,2,3,4,5},2
返回值:
{4,5}
說明:
返回倒數(shù)第2個節(jié)點4,系統(tǒng)會打印后面所有的節(jié)點來比較。
解題思路
本題考察數(shù)據(jù)結構鏈表的使用。本題常用兩種思路,一種是比較基礎的,就是用容器把鏈表指針依次存儲,輸出倒數(shù)第k個即可,這樣空間復雜度為O(n);另一種進階解法,快慢指針法,讓快指針先走k步,當它走到頭時,此時慢指針的位置就是倒數(shù)第k個結點。
測試代碼為快慢指針法,容器法比較簡單就不寫了。
測試代碼
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代碼中的類名、方法名、參數(shù)名已經指定,請勿修改,直接返回方法規(guī)定的值即可 * * * @param pHead ListNode類 * @param k int整型 * @return ListNode類 */ ListNode* FindKthToTail(ListNode* pHead, int k) { // 空鏈表直接返回 if(pHead == NULL) return pHead; // 快慢指針 ListNode *fast = pHead; ListNode *slow = pHead; // 讓快指針先走k步 while(k--) { if(fast == NULL) return NULL; fast = fast->next; } // 當快指針走完時,慢指針的位置就是倒數(shù)第k個結點 while(fast != NULL) { fast = fast->next; slow = slow->next; } return slow; } };
補充
第二種實現(xiàn)方法:
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代碼中的類名、方法名、參數(shù)名已經指定,請勿修改,直接返回方法規(guī)定的值即可 * * * @param pHead ListNode類 * @param k int整型 * @return ListNode類 */ ListNode* FindKthToTail(ListNode* pHead, int k) { // write code here ListNode* p=pHead; ListNode* q=pHead; if(pHead==NULL)return NULL; while(k--) { if(q==NULL)return NULL; q=q->next; //k--; } //if(q==NULL)return pHead; while(q) { p=p->next; q=q->next; } return p; } };
原文鏈接:https://blog.csdn.net/zhaitianbao/article/details/121929835
相關推薦
- 2022-09-17 Oracle數(shù)據(jù)庫表備份導入導出dmp的方式及踩坑記錄_oracle
- 2022-05-21 React?組件中的state和setState()你知道多少_React
- 2022-09-22 elementui select選擇器獲取選中拿到當前對象
- 2022-05-04 Jupyter?notebook運行后打不開網頁的問題解決_python
- 2022-07-14 Android實現(xiàn)手機多點觸摸畫圓_Android
- 2022-11-25 Python利用memory_profiler實現(xiàn)內存分析_python
- 2023-04-07 深度解讀Python如何實現(xiàn)dbscan算法_python
- 2022-03-22 聚合函數(shù)和group?by的關系(理解group by 和聚合函數(shù))
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支