链表中倒数第k个元素
2018-03-13 15:41
232 查看
时间限制:1秒 空间限制:32768K 热度指数:301751本题知识点: 链表 算法知识视频讲解
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个元素。
题目描述
输入一个链表,输出该链表中倒数第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个元素。
相关文章推荐
- Interview----链表的倒数第K个元素
- 查找链表中倒数第k个节点元素
- 找单链表中倒数第K个元素
- Remove Nth Node From End of List --移除链表中的倒数第k个元素
- 【每日一题】CareerCup2.2 寻找链表中倒数第K个元素
- 【学习点滴-数据结构-单链表】 求单链表的中间元素和倒数第k个元素
- 链表中倒数第K个元素,
- 寻找单链表中倒数第k个元素
- 求链表倒数第k个元素
- 如何找到链表的倒数第k个元素
- 取单链表倒数第k个元素
- 【剑指offer】打印链表倒数第k个元素
- 查找链表的倒数第k个元素
- 输出链表倒数第k个元素
- 查找单链表中倒数第k个元素
- 每天一算法(输出链表倒数第k个元素)
- [CareerCup] 2.2 Kth to Last Element of Linked List 链表的倒数第k个元素
- 程序员面试题目总结--链表(2)【找出单链表中的倒数第K个元素】
- 尾插法、头插法创建链表、链表反转、链表分段反转、查找链表倒数第k个元素,查找链表中间元素
- Q:链表的倒数第K个元素