周梦康 发表于 2015-06-22 2638 次浏览 标签 : 计算机基础剑指 offer数据结构

输入一个链表,输出该链表中倒数第 K 个结点。为了符合大多数人的习惯,本题从 1 开始计数,即链表的尾节点是倒数第 1 个结点。例如一个链表有 6 个结点,从头结点开始他们的值依次为 1,2,3,4,5,6。这个链表的倒数第 3 个结点是值为 4 的结点。

链表结果定义如下:

struct ListNode{
    int m_nVaule;
    ListNode* m_pNext;
};
ListNode* FindNode(ListNode* pListHead,unsigned int k){
    if(pListHead == NULL || k == 0){
        return NULL;
    }

    ListNode* pAhead = pListHead;
    ListNode* pBehind = NULL;

    for (unsigned int i = 0; i < k -1; ++i) {
        if(pAhead->m_pNext != NULL){
            pAhead = pAhead->m_pNext;
        }else{
            return NULL;
        }
    }

    pBehind = pListHead;
    
    while(pAhead->m_pNext != NULL){
        pAhead = pAhead->m_pNext;
        pBehind = pBehind->m_pNext;
    }

    return pBehind;
}

评论列表