newcoder【链表中倒数第k个结点】
题目描述:
输入一个链表,输出该链表中倒数第k个结点。
来源:牛客(newcoder)
链接:https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId
思路:
- 使用快慢指针slow,fast解决这个问题,快指针fast比慢指针slow快k步。
- 如果fast不为空,则迭代。否则,返回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) {
struct ListNode* slow = pListHead;
struct ListNode* fast = slow;
while(k--)//fast走k步,确保slow所指的值是fast的倒数第k个
{
if(fast)
fast = fast->next;
else
return NULL;
}
while(fast)//迭代,slow所指的值是链表的倒数第k个
{
slow = slow->next;
fast = fast->next;
}
return slow;
}
};
环境:
c语言
图片分析: