思路:设置两个指针,一个指针从链表第一个结点开始,另一个指针从第k个结点开始,两个指针同时走,当第二个指针到达链表尾时,第一个指针指向倒数第k个结点。
考虑特殊情况:链表长度小于k,那么返回空。
btw,通过测试,倒数第0个结点看做链表的最后一个结点。
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { 12 ListNode *tmp = pListHead, *res = pListHead; 13 /* unsigned int cnt = 0; 14 for (; tmp != NULL; cnt++) { 15 if (cnt >= k) 16 res = res->next; 17 tmp = tmp->next; 18 } 19 return cnt < k ? NULL : res; */ 20 int cnt = 0; 21 while (tmp != NULL && (cnt < k)) { 22 tmp = tmp->next; 23 cnt++; 24 } 25 while (tmp != NULL) { 26 tmp = tmp->next; 27 res = res->next; 28 } 29 return cnt < k ? NULL : res; 30 } 31 };
原文:https://www.cnblogs.com/qinduanyinghua/p/10636742.html