14链表中倒数第k个结点

题目描述

输入一个链表,输出该链表中倒数第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 == nullptr){
            return nullptr;
        }
        ListNode* head = pListHead;
        ListNode* p1 = pListHead;
        ListNode* p2 = pListHead;
        int len = 0;
        while(head != nullptr){
            head = head -> next;
            ++len;
        }
        if(k > len){
            return nullptr;
        }
        //k = k % len;        
        for(int i =0;i < k;++i){
            p2 = p2 -> next;
        }
        while(p2 != nullptr){
            p1 = p1 -> next;
            p2 = p2 -> next;
        }
        return p1;
    }
};
原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7922933.html