剑指offer题目14:链表中倒数第k个结点

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

解答思路

没有什么难点,因为之前在论坛上看过别人谈论过快慢指针。

解答思路就是创建两个指针分别指向头部,先让第一个指针先走K-1步,然后两个指针一起走,当第一个指针走到尽头,第二指针就是倒数k的位置了。(为什么是k-1,因为索引从1开始算的,如倒数第1部是最后1个节点)

实现代码

/*
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* firstNode = pListHead;
        ListNode* secondNode = pListHead;

        if(firstNode == NULL || k <= 0) {
            return NULL;
        }

        // 倒数第1个节点就是索引0,所以从1开始
        for(int i = 1; i < k; i++) {
            if(firstNode->next != NULL) {
                firstNode = firstNode->next;
            } else {
                return NULL;
            }
        }

        while(firstNode->next != NULL) {
            firstNode = firstNode->next;
            secondNode = secondNode->next;
        }

        return secondNode;
    }
};
posted @ 2019-03-29 14:20  {-)大傻逼  阅读(127)  评论(0)    收藏  举报
欢迎转载,转载请注明本文地址。