题目描述
思路一
很明显的一个想法就是一遍遍历链表,记录链表长度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个元素!