分析:第一次直接蠻力寫的,看看分析後知道可以通過快慢指針來寫,兩個指針的間距爲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;
}
};