题解 | #链表中倒数最后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;
    }
全部评论

相关推荐

09-25 10:34
东北大学 Java
多面手的小八想要自然醒:所以读这么多年到头来成为时代车轮底下的一粒尘
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务