解法一:遍历求总长,再循环
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* getKthFromEnd(struct ListNode *head, int k){
struct ListNode *p = head;
int a = 1;
while(p->next){
a++;
p = p-> next;
}
p = head;
for(int i = 1; i < a-k+1; i ++)
p = p->next;
return p;
}
解法二:双指针法
struct ListNode* getKthFromEnd(struct ListNode* head, int k){
struct ListNode*slow_p=head,*p=head;
while(k--) p=p->next;
while(p!=0){
slow_p=slow_p->next;
p=p->next;
}
return slow_p;
}