您的位置:首页 > Web前端

剑指offer--15.链表中倒数第k个节点

2016-07-09 17:59 435 查看
题目描述

输入一个链表,输出该链表中倒数第k个结点。

两种方式:

1、遍历两遍链表:倒数K==正数n-k+1。第一遍遍历求n,第二遍遍历n-k+1个节点即可。

2、遍历一遍链表:两个指针。第一个遍历k-1步后,第二个指针开始遍历。第一个到尾节点后,第二个为倒数第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) {
//输入pHeadList为NULL?
//输入K==0?
if (pListHead == NULL||k==0)
return NULL;
ListNode* p1 = pListHead;
ListNode* p2 = pListHead;

while (--k != 0)
{
//输入的K大于整个链表的长度
if(p1->next==NULL)
return NULL;
p1=p1->next;
}
while (p1->next != NULL)
{
p1 = p1->next;
p2 = p2->next;
}
return p2;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: