题目描述
思路一
很明显的一个想法就是一遍遍历链表,记录链表长度n,第二次循环n-k次,就到了我们想要的节电处
这个思路很简单,不值得深究.
思路二
这是我想着重记录的,"倒数"先关的题目,一般的优化思路都是快慢指针,因为快指针先移动K次,慢指针从头开始移动,快指针每一次都比慢指针快K格子,所以当快指针移动到指针末尾时,慢指针也就在倒数第K个位置了.AC代码如下:
class Solution {
public:
ListNode* getKthFromEnd(ListNode* head, int k) {
ListNode* slow = head;
ListNode* fast = head;
for (int i = 0; i < k; ++i) {
fast = fast->next;
}
while (fast) {
fast = fast->next;
slow = slow->next;
}
return slow;
}
};
总结
凡是求倒数的题目,最后都是要想到快慢指针,一个先移动,一个后移动,相差K个元素!
本文介绍了如何使用快慢指针技巧解决链表问题,通过一次遍历找到链表长度,然后利用快指针先行k步,再同时移动两者找到倒数第k个节点。通过实例展示了思路并强调了快慢指针在求解倒数问题中的通用性。
503

被折叠的 条评论
为什么被折叠?



