写在前面: 起初想到的是先遍历一遍,再重新把相差的个数跑完,后用双指针优化成了只需要跑一遍就能得到结果
- 欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新
C代码:
/**
* 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 sum=0;
// ListNode *p=head;
// while(p)
// {
// p=p->next;
// sum++;
// }
// int temp=sum-k;
// while(temp--)
// head=head->next;
// return head;
ListNode *fast=head,*slow=head;
int flag=0;
while(fast)
{
if(flag>=k)
slow=slow->next;
fast=fast->next;
flag++;
}
return slow;
}
};
JS代码:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} k
* @return {ListNode}
*/
var getKthFromEnd = function(head, k) {
// var sum=0,p=head;
// while(p)
// {
// sum++;
// p=p.next;
// }
// var temp=sum-k;
// while(temp--)
// {
// head=head.next;
// }
// return head;
var fast=head,slow=head,flag=0;
while(fast)
{
if(flag>=k)
slow=slow.next;
fast=fast.next;
flag++;
}
return slow;
};