面试题15:链表中倒数第K个节点

 类似问题:判断是否是环形节点,寻找中间节点,一个指针一次走一步,另一个指针一次走两步

注意检查三点鲁棒性:

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 }

 

posted on 2016-07-05 15:29  已停更  阅读(186)  评论(0编辑  收藏  举报