您的位置:首页 > Web前端

《剑指offer》链表中倒数第k个结点

2016-06-29 13:33 357 查看

一、题目描述

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

二、输入描述

一个链表

三、输出描述

链表的倒数第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) {

}
};


五、解题思路

建两个结点指针,一个指针为起始节点,另外一个位距离起始节点长度为k的末尾节点。从原链表的头开始不断向后寻找,当末尾节点找到最后时,起始节点所只想的是倒数第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(k <= 0) return NULL;

ListNode *goalNode, *kNode;
goalNode = pListHead;
kNode = goalNode;
for(int i = 1; i < k; i++)
{
if(kNode) kNode = kNode->next;

if(!kNode) return NULL;

}

while(kNode && kNode->next)
{
kNode = kNode->next;
goalNode = goalNode->next;
}

return goalNode;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: