类似问题:判断是否是环形节点,寻找中间节点,一个指针一次走一步,另一个指针一次走两步
注意检查三点鲁棒性:
1. 链表为空
2. k为0
3. 链表长度不够k
1 ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) 2 { 3 if(pListHead == NULL || k == 0) //链表为空或者k为0都是非法输入 4 return NULL; 5 6 ListNode *pAhead = pListHead; 7 ListNode *pBehind = NULL; 8 9 for(unsigned int i = 0; i < k - 1; ++ i) 10 { 11 if(pAhead->m_pNext != NULL) 12 pAhead = pAhead->m_pNext; 13 else 14 { 15 return NULL; //链表长度不够k也不行 16 } 17 } 18 19 pBehind = pListHead; 20 while(pAhead->m_pNext != NULL) 21 { 22 pAhead = pAhead->m_pNext; 23 pBehind = pBehind->m_pNext; 24 } 25 26 return pBehind; 27 }