分析:第一次直接蛮力写的,看看分析后知道可以通过快慢指针来写,两个指针的间距为k,当快指针到结尾时,慢指针即在开始的位置
先前的写法:
/**
* 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) {
ListNode* cur=head;
int cnt=0; //记录链表总长cnt
while(cur)
{
cnt++;
cur=cur->next;
}
int begin=cnt-k; //待打印起始位置begin
while(begin--)
{
head=head->next; //head指针指向该结点
}
return head;
}
};
快慢指针:
/**
* 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) {
ListNode *frontNode=head,*backNode=head;
while(backNode!=NULL&&k>0)
{
k--;
backNode=backNode->next;
}
while(backNode!=NULL)
{
backNode=backNode->next;
frontNode=frontNode->next;
}
return frontNode;
}
};