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