原題鏈接:https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&&tqId=11167&rp=2&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking
目錄
1. 題目描述
2. 思路分析
3. 代碼實現
1. 題目描述
2. 思路分析
快慢指針法?(如果有小伙伴不了解快慢指針法,可以看看這篇文章:https://blog.csdn.net/m0_62531913/article/details/132309395?spm=1001.2014.3001.5502)
定義快慢指針fast和slow。首先讓fast先走k步,然后fast和slow同時走,fast走到末尾時,slow就走到倒數第k個節點。最后我們返回slow即可。
這題需要注意的是,k有可能大于鏈表長度,遇到這種情況,我們直接返回空指針NULL。
3. 代碼實現
/*** struct ListNode {* int val;* struct ListNode *next;* };*//*** * @param pListHead ListNode類 * @param k int整型 * @return ListNode類*/
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {struct ListNode *slow=pListHead,*fast=pListHead;while(k--){//鏈表沒有k步長,倒數就算是空if(fast==NULL)return NULL;elsefast=fast->next;}while(fast){slow=slow->next;fast=fast->next;}return slow;
}