链表中倒数第k个结点

题目描述

输入一个链表,输出该链表中倒数第k个结点。
两个链表,一个记录k-1步,一个从0开始。这样第一个链表相当于记录的作用。这里要好好理解一下为什么是k-1而不是k。因为是k的话和第二个链表一起走的时候,就是k+1了而不是刚好对应k。
优质解答
class Solution {
public:
    ListNode* FindKthToTail(ListNode* p, unsigned int k) {
        //if(!p) return nullptr;
        auto p1=p;
        for(int i=0;i!=k;++i)
            if(!p1)return nullptr;
        else
            p1=p1->next; 
        while(p1){ 
            p1=p1->next;
            p=p->next;
        }
        return p;
    }
};
 
 
劣质解答

class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
  ListNode* first = pListHead;
  ListNode* second = pListHead;
  if(first == nullptr)
    return nullptr;
  for(int i =0 ;i <k-1;i++){  //这里走k-1步,为什么呢? 因为第k步就要和second一起走

    if(first->next != nullptr)
      first = first->next;
    else
      return nullptr;
  }
  while(first->next != nullptr){
      first = first->next;
      second = second ->next;
  }
      return second;
  }
};

posted @ 2020-05-22 21:52  转瞬即逝1995  阅读(95)  评论(0编辑  收藏  举报