剑指Offer—查找链表倒数第K个结点

只遍历一次链表,即可查询到倒数第K个结点——快慢指针。

第一个指针从链表的头指针开始遍历向前走K-1步,第二个指针不动。从第K步开始,第二个指针从头指针开始遍历,第一个指针从第K-1个结点开始遍历。当第一个指针到达尾结点时,则第二个指针正好指向倒数第K个结点。(两个指针相差K步)

//创建两个指针
ListNode *FindKthToTail(ListNode *pHead,unsigned int k)
{
    //检验输入是否符合要求
    if(pHead==NULL||k==0)
        return NULL;
    ListNode *fast=pHead;
    ListNode *slow=pHead;
    for(unsigned int i=0;i<k-1;++i)
    {
    //检测输入K值是否大于链表长度
      if(fast->m_pNext!=NULL)
          fast=fast->m_pNext;
      else
      {
          return NULL;
      }
    }
    while(fast->m_pNext!=NULL)
    {
        fast=fast->m_pNext;
        slow=slow->m_pNext;
    }
    return slow;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值