求链表中倒数第K个节点

来源:互联网 发布:keras 安装 windows 编辑:程序博客网 时间:2024/06/08 00:23
  • 题目:输入一个链表输出链表中的第K个节点,(计数从1开始),链表节点定义如下:
struct ListNode{    ListNode()    :_next(NULL)    , _data(0)    {}    ListNode *_next;    int _data;};
  • 思路:我们可以定义两个指针,第一个指针从链表的头指针开始向前走K个节点,第二个指针开始保持不动,第一个走完K个后,第二个指针从链表头部开始,当第一个指针到达最后的NULL时,第二个指针刚好是倒数第K个结点。

  • 实现代码

ListNode *FindKthToTail(ListNode *pHead, size_t k){    if (NULL == pHead || k == 0)        return NULL;    ListNode *fast = pHead;    ListNode *slow = pHead;    for (size_t i = 0; i < k; ++i)    {        if (fast)//防止k大于链表节点个数            fast = fast->_next;        else            return NULL;    }    while (fast)    {        fast = fast->_next;        slow = slow->_next;    }    return slow;}
  • 完整代码请戳:
    https://coding.net/u/Hyacinth_Dy/p/MyCode/git/blob/master/%E6%9F%A5%E6%89%BE%E9%93%BE%E8%A1%A8%E4%B8%AD%E5%80%92%E6%95%B0%E7%AC%ACK%E4%B8%AA%E8%8A%82%E7%82%B9