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

注意检查三点鲁棒性:

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 }

 

相关文章:

  • 2021-10-21
  • 2022-12-23
  • 2021-07-23
  • 2021-07-27
  • 2021-06-28
猜你喜欢
  • 2021-11-24
  • 2022-12-23
  • 2022-01-13
  • 2021-05-24
  • 2022-12-23
  • 2021-12-26
  • 2021-09-15
相关资源
相似解决方案