链表中倒数第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;
}
};

浙公网安备 33010602011771号