剑指offer14-链表中倒数第k个结点

题目描述

输入一个链表,输出该链表中倒数第k个结点。

思路:有2方法。

第一种:找到数组的长度i,让指针从头开始走i-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 NULL;
        ListNode* p = pListHead;
        ListNode* q = pListHead;
        int i=1;
        while(p->next!=NULL)
        {
            p=p->next;
            i++;
        }
        if(k>i) return NULL;
        while(i-k>0)
        {
            q=q->next;
            i--;
        }
        return q;
    
    }
};
原文地址:https://www.cnblogs.com/loyolh/p/12347082.html