• 剑指offer--面试题15


    题目:打印单向链表中倒数第k个节点

    以下为自己所写代码,未经过验证,只是写个思路。。。

    #include<iostream>
    #include<vector>
    #include<exception>
    
    using namespace std;
    //节点定义
    struct ListNode
    {
        int m_nValue;
        ListNode* m_pNext;
    };
    
    void FindKthToTail(ListNode* pHead, unsigned int k)
    {
        if(pHead == NULL)
            throw new std::exception("Invalid parameters!");
    
        std::vector<int> Values;
        ListNode* pNode = pHead;
    
        while(pNode != NULL)
        {
            Values.push_back(pNode->m_nValue);
            pNode = pNode->m_pNext;
        }
    
        if(k > Values.size())
            throw new std::exception("Invalid parameters!");
        else
            std::cout<<Values[Values.size() - k]<<std::endl;    
    
    }

    如果不允许使用vector,则另想办法:用具有某种限制的两个指针进行一次遍历即可!

    自己所写代码如下:

    ListNode* FindKthToTail(ListNode* pHead, unsigned int k)
    {
        if(pHead == NULL || k <= 0)
            return NULL;
        int index = 1;
        ListNode* pNode = pHead;
        while(i <= k && pNode != NULL)
            pNode = pNode->m_pNext;
        if(pNode == NULL)
            return NULL;
        else
        {
            ListNode* pNodeFollow = pHead;
            while(pNode->m_pNext != NULL)
            {
                pNode = pNode->m_pNext;
                pNodeFollow = pNodeFollow->m_pNext;
            }
        }
    
        return pNodeFollow;
    
    }

    错误处理后,均return NULL;

    让防御性编程成为自己的习惯!

    清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己 -- 共勉
  • 相关阅读:
    poj 3159 Candies
    强连通分量——Tarjan算法
    nyoj 次方求模
    nyoj 快速查找素数
    nyoj 光棍节的快乐
    拓扑排序
    快速幂取模
    nyoj 最大素因子
    素数打表
    nyoj 数的长度
  • 原文地址:https://www.cnblogs.com/hello-yz/p/3252374.html
Copyright © 2020-2023  润新知