1. 程式人生 > >劍值offer66題之每日一題——第十四題

劍值offer66題之每日一題——第十四題

題目描述:

         輸入一個連結串列,輸出該連結串列中倒數第k個結點。K=0.。。。。N。

思路:從連結串列頭到倒數第K個節點長度=正數第K個節點到連結串列尾,讓p,q指向表頭,先讓p指標走到正數第K個節點,然後讓P,q同時往後走,當p指標走到表尾時,q正好走到倒數第K個節點。

程式碼實現:

ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
     //從連結串列頭到倒數第K個節點長度=正數第K個節點到連結串列尾,讓p,q指向表頭,先讓p指標走到正數第K個節點,然後讓P,q同時往後走
        //當p指標走到表尾時,q正好走到倒數第K個節點。
        
        ListNode *p,*q;
        p=pListHead;
        q=pListHead;
       unsigned int i=0;
        while(i<k)
        {
            if(!p) return nullptr;
            else{
               p=p->next;
               i++; 
            }
            
        }
        while(p)
        {
            p=p->next;
            q=q->next;
        }
        return q;
    }