头歌实训:链表倒数第k个结点
任务描述
本关任务:编写一个函数,返回不带附加头结点的单链表中倒数第k个结点。
编程要求
根据提示,在右侧编辑器补充完成函数LinkNode *findKthNode(LinkNode *L, int k)的代码,该函数的功能是返回不带附加头结点的单链表L中倒数第k个结点的指针。
测试说明
平台会对你编写的代码进行测试:
测试输入:
5 2
1 2 3 4 5
预期输出:
4
测试输入:
5 1
1 2 3 4 5
预期输出:
5
测试输入:
5 5
1 2 3 4 5
预期输出:
1
提示:
题目保证k的值 1≤k≤链表长度 。
开始你的任务吧,祝你成功!
源代码:
#include <bits/stdc++.h>
using namespace std;
#include "linklist.h" //包含单链表基本运算及实现
/**
* 递归求单链表倒数第k个结点。
* L为不带附加头结点的单链表的头指针。
* 返回值:指向倒数第k个结点的指针。
*/
//请在下面填写代码
/**********************Begin**********************/
LinkNode *findKthNode(LinkNode *L, int k)
{
if(L == NULL)
{
return NULL;
}
int count = 0;
LinkNode* cur = L;
while(cur != NULL)
{
count ++;
cur = cur -> next;
}
if(k > count)
{
return NULL;
}
LinkNode* slow = L;
LinkNode* fast = L;
int i;
for(i = 0; i < k; i ++)
{
if(fast != NULL)
{
fast = fast -> next;
}
}
while(fast != NULL)
{
slow = slow -> next;
fast = fast -> next;
}
return slow;
}
/***********************End***********************/
//请勿改动下面的代码
int main(int argc, char *argv[])
{
int n, k;
cin >> n >> k; //输入n
int *a = new int[n]; //申请长度为n的数组
for (int i = 0; i < n; i++)
cin >> a[i];
LinkNode *L = NULL;
CreateList(L, a, n);
// DispList(L);
LinkNode *p = findKthNode(L, k);
if (p)cout << p->data << endl;
else cout << "error\n";
delete[] a; //释放数组
return 0;
}
4660

被折叠的 条评论
为什么被折叠?



