链表倒数第k个节点

时间:2023-03-08 20:11:54

1.一种较笨的办法是先将链表元素入栈,然后出栈找到倒数第k个节点值,再拿着值遍历链表去找到对于节点。

  • 时间复杂度:O(n) (3n 遍历-出栈-遍历)
  • 空间复杂度:O(n) (一个栈)

2.快慢指针,要注意边界值的处理。

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)只额外需要一个指针的空间。
 /*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
//边界判断!!!
if(pListHead == nullptr || k == )
return nullptr;
auto p = pListHead;
//快先走k-1
for(int i=; i<k-; i++)
{
if(p->next == nullptr)
return nullptr;
else
p = p->next;
}
//一起走到尾
while(p->next != nullptr)
{
p = p->next;
pListHead = pListHead->next;
}
return pListHead;
}
};