题解 | #链表中倒数最后k个结点#

链表中倒数最后k个结点

https://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9

struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {
    // 先把长度定好,进行平移
    struct ListNode* ptTail = pHead;
    struct ListNode* ptHead = pHead;

    // 先把头往前面走K位
    int i = 0;
    for (i = 0; i < k; i++)
    {
        // 如果头往前走的过程中为NULL了,那证明链表结点没有那么多个,直接返回空链表
        if (ptHead == NULL)
        {
            return ptHead;
        }
        ptHead = ptHead->next;
    }

    // 再头尾一起走,头到NULL了,头尾相隔刚好K个结点
    while (ptHead != NULL)
    {
        ptHead = ptHead->next;
        ptTail = ptTail->next;
    }
    
    return ptTail;
}

struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {
    struct ListNode* ptTail = pHead;
    struct ListNode* ptHead = pHead;

    // 计算总的长度
    int len = 0;
    while (NULL != ptHead)
    {
        ptHead = ptHead->next;
        len++;
    }

    // 总长度减去目标长度得出需要偏移的长度
    int tmp = len - k;
    if (tmp < 0)
    {
        return  ptHead; 
    }

    // 根据需要偏移的长度位数进行偏移
    while (tmp > 0)
    {
        ptTail = ptTail->next;
        tmp--;
    }
    
    return ptTail;
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务