/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* getKthFromEnd(ListNode* head, int k) {
int ans=1;
ListNode* q=head;
while(q->next){
q=q->next;
ans++;
}
int c=ans-k;
while(c--){
head=head->next;
}
return head;
}
};
然后正常的还有一种思路是通过快慢指针来写,我觉得可以学一下,核心代码如下:
ListNode *fast = head;
ListNode *slow = head;
for (int i = 0; i < k; ++i) {
fast = fast->next;
}
while (fast != NULL) {
fast = fast->next;
slow = slow->next;
}
return slow;
我还看到有牛逼的用vector写,很有趣,我把别人写的代码放在下面拓展思维。(主要是学习一下vector的用法)
class Solution {
public:
ListNode* getKthFromEnd(ListNode* head, int k) {
ListNode *tail=head;
vector<ListNode*>res;
while(tail!=NULL)
{
res.push_back(tail);
tail=tail->next;
}
return res[res.size()-k];
}
};