题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路:要保证两个链表之间相差k个,这样计算移动才是正确结果,这题受到以前做的题目的影响,面试的时候一定要问清楚k会不会大于总长度,如果大于总长度是取模还是出错,这题就是返回错误信息。
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead == nullptr){ return nullptr; } ListNode* head = pListHead; ListNode* p1 = pListHead; ListNode* p2 = pListHead; int len = 0; while(head != nullptr){ head = head -> next; ++len; } if(k > len){ return nullptr; } //k = k % len; for(int i =0;i < k;++i){ p2 = p2 -> next; } while(p2 != nullptr){ p1 = p1 -> next; p2 = p2 -> next; } return p1; } };