题目描述
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
正常返回倒数第k个结点指针,异常返回空指针.
要求:
(1)正序构建链表;
(2)构建后要忘记链表长度。
数据范围:链表长度满足 1 \le n \le 1000 \1≤n≤1000 , k \le n *k≤n* ,链表中数据满足 0 \le val \le 10000 \0≤val≤10000
本题有多组样例输入。
题目来源
输入描述
输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值
输出描述:
输出一个整数
输入: 8
1 2 3 4 5 6 7 8
4
输出:
5
具体实现
#include <stdio.h>
struct ListNode
{
int m_nKey;
struct ListNode* m_pNext;
};
int main(){
struct ListNode *head = NULL, *tmp, *p;
int num;
int m_nKey;
int i = 0;
int k;
while(scanf("%d", &num) != EOF){
for(i = 0; i < num; i++){
p = (struct ListNode *)malloc(sizeof(struct ListNode));
scanf("%d", &m_nKey);
p->m_nKey = m_nKey;
p->m_pNext = NULL;
if(head == NULL)
head = p;
else
tmp->m_pNext = p;
tmp = p;
}
tmp = head;
scanf("%d", &k);
for(i = 0; i < num-k;i++){
tmp = tmp->m_pNext;
}
printf("%d", tmp->m_nKey);
while(head != NULL){
tmp = head;
head = tmp->m_pNext;
free(tmp);
}
printf("\n");
}
return 0;
}