题目1517:链表中倒数第k个结点
2015-05-28 16:15
381 查看
时间限制:1 秒内存限制:128 兆题目描述:输入一个链表,输出该链表中倒数第k个结点。(hint: 请务必使用链表。)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素。输入的第二行包括n个数t(1<=t<=1000000):代表链表中的元素。输出:对应每个测试案例,若有结果,输出相应的查找结果。否则,输出NULL。样例输入:
5 2 1 2 3 4 5 1 0 5样例输出:
4 NULL
分析:链表的典型算法,首先判断k是否合理,在通过两个快慢指针找到倒数第k个节点。
#include <iostream>#include <cstdio>using namespace std;struct ListNode{int val;ListNode *next;ListNode(int _val) : val(_val) , next(NULL) {}};ListNode dummy(-1);int findK(ListNode *head, int n, int k){ListNode *p = head, *q = head;while(k){q = q -> next;k--;}while (q){q = q -> next;p = p -> next;}return p -> val;}void deleteNode(ListNode *head){if (head == NULL)return;deleteNode(head -> next);delete head;}int main(void){int n, k;while (scanf("%d%d", &n, &k) != EOF){ListNode *pre = &dummy;int val;for (int i = 0; i < n; ++i){scanf("%d", &val);pre -> next= new ListNode(val);pre = pre -> next;}if (k > n || k == 0)printf("NULL\n");else{printf("%d\n", findK(&dummy, n, k));}deleteNode(dummy.next);}return 0;}[/code]
相关文章推荐
- 题目1517:链表中倒数第k个结点
- 九度_题目1517:链表中倒数第k个结点
- 题目1517:链表中倒数第k个结点
- [Jobdu] 题目1517:链表中倒数第k个结点
- 【LeetCode】Remove Nth Node From End of List && 【九度】题目1517:链表中倒数第k个结点
- 题目1517:链表中倒数第k个结点
- 题目1517:链表中倒数第k个结点-九度
- 题目1517:链表中倒数第k个结点
- 剑指offer-题目1517:链表中倒数第k个结点 (2013.12.29)
- 九度OJ-题目1517:链表中倒数第k个结点
- 题目1517:链表中倒数第k个结点
- 九度题目1517:链表中倒数第k个结点
- 【剑指Offer面试编程题】题目1517:链表中倒数第k个结点--九度OJ
- 题目1517:链表中倒数第k个结点
- 【剑指Offer面试编程题】题目1517:链表中倒数第k个结点--九度OJ
- 题目1517:链表中倒数第k个结点
- [链表]九度OJ-1517:链表中倒数第k个结点
- 1517:链表中倒数第k个结点 @jobdu
- 剑指Offer - 九度1517 - 链表中倒数第k个结点
- 【九度OJ1517】|【剑指offer15】链表中倒数第k个结点