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

题目描述

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

解题思路

  pOne指针先跑,并且记录节点数,当pOne指针跑了k-1个节点后,pTwo指针开始跑,
当pOne指针跑到最后时,pTwo所指指针就是倒数第k个节点
class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        if(pListHead==NULL||k==0) return NULL;
           ListNode*pOne=pListHead;
           ListNode*pTwo=pListHead;
           int i=1;
        while(i<k){
            if(pOne->next!=NULL)//一定要判断呀
                pOne=pOne->next;
             else
                return NULL;
            i++;
    }
        while(pOne->next!=NULL){
            pOne=pOne->next;
            pTwo=pTwo->next;
        }
        return pTwo;
    }
};

  优化版:

class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        if(pListHead==NULL||k==0) return NULL;
        
           ListNode*pOne=pListHead;
           ListNode*pTwo=pListHead;
           int i=1;
        while(pOne->next!=NULL){
            if(i>=k)
                pTwo=pTwo->next;
            pOne=pOne->next;
            i++;
        }
        if(k>i) return NULL;//别忘了这个判断
        return pTwo;
    }
};

  

posted @ 2018-05-16 13:57  Curo  阅读(111)  评论(0编辑  收藏  举报