面试题15:链表中倒数第k个节点
2016-06-04 17:09
351 查看
题目:输入一个链表,输出该链表中倒数第k个节点。从1开始计数,如链表有1,2,3,4,5,6.倒数第三个节点是值为4的节点。
可以采用两个指针,思路比较清晰,但是就是一些边界条件很难考虑全,比如k超出了链表的长度。
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==NULL)
return NULL;
ListNode* fast=pListHead;
ListNode* slow=pListHead;
int num=1;
while(fast!=NULL&&num<=k)
{
fast=fast->next;
num++;
}
if(fast==NULL&&num<=k)
return NULL;
while(fast!=NULL)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
}; 看了下书上的解答,代码思路清晰,如下:
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==NULL||k==0)
return NULL;
ListNode* fast=pListHead;
ListNode* slow=pListHead;
for(unsigned int i=0;i<k-1;i++)
{
if(fast->next!=NULL)
fast=fast->next;
else
return NULL;
}
while(fast->next!=NULL)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
};
可以采用两个指针,思路比较清晰,但是就是一些边界条件很难考虑全,比如k超出了链表的长度。
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==NULL)
return NULL;
ListNode* fast=pListHead;
ListNode* slow=pListHead;
int num=1;
while(fast!=NULL&&num<=k)
{
fast=fast->next;
num++;
}
if(fast==NULL&&num<=k)
return NULL;
while(fast!=NULL)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
}; 看了下书上的解答,代码思路清晰,如下:
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==NULL||k==0)
return NULL;
ListNode* fast=pListHead;
ListNode* slow=pListHead;
for(unsigned int i=0;i<k-1;i++)
{
if(fast->next!=NULL)
fast=fast->next;
else
return NULL;
}
while(fast->next!=NULL)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
};
相关文章推荐
- 面试题总结之Database
- 每个程序员都应牢记的7种坏味道,11种原则,23种模式
- 面试题总结之JAVA
- Google Java编程风格指南(献给那些没有良好编码习惯的程序员们)转载!
- IT求职中,笔试、面试的算法准备
- 涨姿势!阿里巴巴几轮面试的点滴经历
- sql 面试题
- MarkDown环境的配置-mac
- 面试中怎么回答HashMap的工作原理
- 学术诚信与职业道德 感想
- 面试感悟:3年工作经验程序员应有的技能
- 百度面试经验
- 0603 诚信与职业道德
- 多线程经典面试题
- 百度面试归来,经验值又+1了
- Java面试题之基础(1)
- 程序员兼职测试的自我修养
- 剑指Offer----面试题17:合并两个排序的链表
- 记我的一次电话面试
- 学术诚信和职业道德