• 面试题15:链表中倒数第k个结点


    题目描述

    输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。

    题目分析

    剑指Offer(纪念版)P107

    代码实现

    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. 判断一个单向链表是否形成了环形结构

  • 相关阅读:
    c++ stl string char* 向 string 转换的问题
    不要在疲惫中工作
    今天
    悠然自得
    忙与闲
    <转>LuaTinker的bug和缺陷
    匿名管道
    SetWindowHookEx 做消息响应
    最近工作
    实现网页页面跳转的几种方法(meta标签、js实现、php实现)
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4832041.html
Copyright © 2020-2023  润新知