【链表】查找倒数第K个值

零、题目
输入一个链表,然后输出它的倒数第K个结点的值,计数从1开始,也就是说,链表结尾的元素就是倒计数第1个元素。

一、理解题目
1 链表;ListNode* pListHead;
2 目标值的位置,unsigned int k;
3 链表的遍历,while循环,

二、拟定方案
1 思路是同时走两个指针,步距是k;这样当第一个指针走到尾部第二个指针会在倒数第K个节点;ListNode* pAhead, ListNode* pBehind
2 首先先走K步,使用的是for循环实现;然后使用while循环,一直到最后;

三、code
零、题目
输入一个链表,然后输出它的倒数第K个结点的值,计数从1开始,也就是说,链表结尾的元素就是倒计数第1个元素。

一、理解题目
1 链表;ListNode* pListHead;
2 目标值的位置,unsigned int k;
3 链表的遍历,while循环,

二、拟定方案
1 思路是同时走两个指针,步距是k;这样当第一个指针走到尾部第二个指针会在倒数第K个节点;ListNode* pAhead, ListNode* pBehind
2 首先先走K步,使用的是for循环实现;然后使用while循环,一直到最后;

三、code

ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)
{
    if(pListHead == NULL || k == 0)
    {
         return NULL;
    }

    ListNode* pAhead = pListHead;
    ListNode* pBehind = NULL;

   for(unsigned int i = 0; i < k - 1; ++i)
  {
       if(pAhead->m_pNext != NULL)
      {
            pAhead = pAhead->m_pNext;
      }
      else
      {
            return NULL;
      }
  }

   pBehind = pListHead;
   while(pAhead->m_pNext != NULL)
   {
        pAhead = pAhead->m_pNext;
        pBehind = pBehind->m_pNext;
   }

   return pBehind;
}

四、回顾
1 相较于之前的题目来讲,这里是链表已经形成,然后是如何更好地操作链表;
2 遍历链表的本质是指针的移动;两次指针的移动,并不是同时的,我们考虑是否可以让两个指针同时移动;

参考文献
1 https://www.cnblogs.com/wenjiang/p/3310233.html
四、回顾
1 相较于之前的题目来讲,这里是链表已经形成,然后是如何更好地操作链表;
2 遍历链表的本质是指针的移动;两次指针的移动,并不是同时的,我们考虑是否可以让两个指针同时移动;

参考文献
1 https://www.cnblogs.com/wenjiang/p/3310233.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值