剑指offer-刷题笔记-简单题-JZ22 链表中倒数最后k个结点
版本1是自己写的,可以通过,但是由于要通过遍历计算链表的节点个数,所以时间复杂度和空间复杂度偏大,版本2通过保存所有的链表节点指针,通过一次遍历就可以取出结果(链表节点指针可以保存,没想到)
版本1
class Solution {
public:
ListNode* FindKthToTail(ListNode* pHead, int k)
{
int count = 1;
int count1 = 1;
ListNode* currNode = pHead;
while(pHead)
{
pHead = pHead->next;
count ++;
}
if((count <= k) ||(k==0))
{
return NULL;
}
while(currNode)
{
if(count1 == (count - k))
{
return currNode;
}
currNode = currNode->next;
count1 ++;
}
return NULL;
}
};
版本2
class Solution {
public:
ListNode* FindKthToTail(ListNode* pHead, int k) {
ListNode* res=nullptr;
vector<ListNode*> insertNode;
while(pHead){
insertNode.push_back(pHead);
pHead=pHead->next;
}
if(insertNode.size()<k) return res;
return insertNode[insertNode.size()-k];
}
};