《剑指Offer》 链表中倒数第k个结点

来源:互联网 发布:淘宝如何复制宝贝链接 编辑:程序博客网 时间:2024/05/07 12:11

题目描述:
输入一个链表,输出该链表中倒数第k个结点。

思路:
设置一个新ret,先将pListHead位置往后移k-1位,使得ret与pListHead距离为k-1,这样只要pListHead为最后一个位置时,ret的位置就是倒数第k个节点的位置,返回ret。

代码:

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :            val(x), next(NULL) {    }};*/class Solution {public:    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {        ListNode *ret = pListHead;        unsigned int i = 0;        //向前步进k-1个节点,因为链表个数可能不足,所以需要判断head值是否有效        while (pListHead && i < k-1) {            ++i;            pListHead = pListHead->next;        }        //head为NULL的话,说明链表个数不足,返回NULL        if (!pListHead) {            return NULL;        }        //让ret与head同步向后步进,这样保证了ret与head之间的距离为k-1。        //这样当head到达最后一个节点的时候,ret即为所求的值。        while (pListHead->next) {            ret = ret->next;            pListHead = pListHead->next;        }        return ret;    }};

输出结果:运行时间: <1 ms 占用内存:8552K 状态:答案正确

0 0
原创粉丝点击