剑指15-输出链表中倒数第k个结点

来源:互联网 发布:string数组添加数据 编辑:程序博客网 时间:2024/05/18 11:05

题目描述
输入一个链表,输出该链表中倒数第k个结点。
思想:
n,n-1,………,k+1, k, k-1,……3,2,1
倒数第k个结点;
前面需要走n-k+1;
定义两个指针p1,p2,开始均指向首节点,先让p1移动到指向第k个节点,然后p1,p2同时移动,p1移动到第n个结点时,刚好移动了n-k+1,此时p2也移动n-k+1,则此时p2刚好指向倒数第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;        //定义两个指针p1,p2,开始均指向首节点,        ListNode*p1 = pListHead;        ListNode*p2 = pListHead;        //先让p1移动到指向第k个节点,        for (int i = 1; i < k; i++) // i = 1开始的,自己画画就明白了        {            if(p1->next!=NULL)                p1=p1->next;            else                 return NULL;        }        //然后p1,p2同时移动,p1移动到第n个结点时,刚好移动了n-k+1,        //此时p2也移动n-k+1,则此时p2刚好指向倒数第k个结点。        while(p1->next!=NULL)        {            p1=p1->next;             p2=p2->next;        }        return p2;    }};