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

链表中倒数最后k个结点

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

# 1. 空间复杂度 O(1),时间复杂度 O(n)

ListNode* FindKthToTail(ListNode* pHead, int k) {
      ListNode *fast_KStepNode = pHead;
      
      while(fast_KStepNode && k){
        fast_KStepNode = fast_KStepNode->next;
        k--;
      }
      
      while(fast_KStepNode){
        fast_KStepNode = fast_KStepNode->next;
        pHead = pHead->next;
      }
      
      return (k ? fast_KStepNode : pHead);
    }

# 2. 空间复杂度 O(n),时间复杂度 O(n) - 有前面简单的方法就不优化这个复杂的方法了

ListNode* FindKthToTail(ListNode* pHead, int k) {
      /* 1.空间复杂度 O(n),时间复杂度 O(n) */
      queue<ListNode*> Q;
      ListNode* Node = pHead;
      ListNode* returnNode = NULL;
      
      // 队列先存k个结点
      while(Q.size() < k){
        // 如果需要的k个结点没存完Node就到尾了
        // 则可以知道该链表长度 < k,返回一个长度为 0 的链表
        if (Node == NULL){ return returnNode; }
        Q.push(Node);
        Node = Node->next;
      }
      
      while(Node){
        Q.pop();
        Q.push(Node);
        Node = Node->next;
      }
      returnNode = Q.front();
      
      return returnNode;
    }
全部评论

相关推荐

05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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