Description
输入一个链表,输出该链表中倒数第k个结点。
Solution 1: Recursion
自己刚开始写了一个递归的思路,到tail就开始计数,计到k就用ans存起来return即可。
//C++
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode* ans = NULL;
helper(ans, pListHead, k);
return ans;
}
unsigned int helper(ListNode*& K, ListNode* head, unsigned int k){
if(NULL == head) return 1;
unsigned int rank = helper(K, head->next, k);
if(rank == k){
K = head;
}
return ++rank;
}
Solution 2: Two Pointers
后来看评论区发现还可以用两个指针标记,前一个比后一个先走k个node,这样第一个到达tail的时候第二个刚好到达倒数第k个
//C++
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead == NULL || k <= 0){
return NULL;
}
ListNode* first = pListHead;
ListNode* second = pListHead;
for(unsigned int i = 1; i < k; i++){
if(first -> next != NULL)
first = first -> next;
else{
return NULL;
}
}
while(first -> next != NULL){
first = first -> next;
second = second -> next;
}
return second;
}