美文网首页
面试题15 链表中倒数第K个数

面试题15 链表中倒数第K个数

作者: 贾雨村甄士隐 | 来源:发表于2016-04-26 02:34 被阅读160次

    题目链接:链表中倒数第K个数

    我的思路

    1. 题目是单向链表,而且要遍历一次链表就搞定的话,肯定需要一个指针指向第K个数的地址。
    2. 若想保证是第K个数,必须当时结束链表遍历,能确定单向链表结束遍历的方法就是一个指针指向最后一个节点。
    3. 此时不难发现这两个节点距离差为K。
    4. 第一次循环K次,是领先的指针移动到第K个节点,然后在循环的时候同时移动两个指针相同步速,一定能指向倒数第K个数字

    实现代码

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
                val(x), next(NULL) {
        }
    };*/
    class Solution {
    public:
        ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) 
        {
            //链表为空 结束
            if(pListHead==NULL||k==0)
            {
                return 0;
            }
            ListNode *pAhead =pListHead;
            ListNode *pBehind =NULL;
            for(unsigned int i =0;i<k-1;++i)
            {
                if(pAhead->next!=NULL)              
                pAhead=pAhead->next;
                else
                {
                    return NULL;
                }
            }
            pBehind=pListHead;
            while(pAhead->next!=NULL)
            {
                pAhead=pAhead->next;
                pBehind=pBehind->next;
            }
                return pBehind;
        }       
    };
    

    相关文章

      网友评论

          本文标题:面试题15 链表中倒数第K个数

          本文链接:https://www.haomeiwen.com/subject/qoeqrttx.html