您的位置:首页 > 其它

链表中倒数第k个元素

2018-03-13 15:41 232 查看
时间限制:1秒 空间限制:32768K 热度指数:301751本题知识点: 链表 算法知识视频讲解

题目描述

输入一个链表,输出该链表中倒数第k个结点。class Solution {
public:
ListNode * FindKthToTail(ListNode* pListHead, unsigned int k) {
if (pListHead == NULL || k == 0)
return NULL;
ListNode *phead = pListHead, *ptail = pListHead;
for (int i = 1; i < k; ++i)
{
if (phead->next != NULL)
phead = phead->next;
else
return NULL;
}
while (phead->next!=NULL)
{
phead = phead->next;
ptail = ptail->next;
}
return ptail;
}
};解题思路:传统方法是从左到右遍历一遍,得出链表中的结点总数,然后计算倒数第k个结点是正数的第几个,然后再从头开始再遍历一遍,但是此时时间复杂度增加。使用只遍历一遍的简单算法:先从1到k遍历,设置指针head不断向后遍历,若遇到空指针,则直接返回空指针,说明链表中的元素不足k个,k之后进行遍历,其值tail指针指向前面的元素,head指针指向后面的元素,head和tail指针正好相差k个元素,当head指向链表额末尾时,正好tail指向第k个元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: