剑指Offer - 九度1517 - 链表中倒数第k个结点
剑指Offer - 九度1517 - 链表中倒数第k个结点
2013-11-30 02:57
- 题目描述:
-
输入一个链表,输出该链表中倒数第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个节点并输出节点值。可以先让一个指针p1从链表头开始跑k歩,然后指针p2指向链表头,两指针同步向前走,当p1走到NULL时,p2即指向倒数第k点。
不过,既然是处理链表,必然要步步为营,检查指针是否指向NULL。对一切“->”进行指诊检查,确保不发生内存错误。野指针是严重错误,面试里敢犯这等错误的话,估计Offer也就无缘了。
// 651911 zhuli19901106 1517 Accepted 点击此处查看所有case的执行结果 1552KB 1018B 100MS
//
#include <cstdio>
#include <cstdlib>
using namespace std; struct Node{
int val;
struct Node *next;
Node(int _val = ): val(_val), next(NULL){}
}; int main()
{
int n, k, i;
int tmp;
struct Node *root = NULL;
struct Node *tail;
struct Node *p1, *p2; root = new Node();
while(scanf("%d%d", &n, &k) == ){
tail = root;
for(i = ; i < n; ++i){
scanf("%d", &tmp);
tail->next = new Node(tmp);
tail = tail->next;
} if(k > n || k < || root->next == NULL){
printf("NULL\n");
continue;
} p1 = p2 = root->next;
while(k > && p1 != NULL){
--k;
p1 = p1->next;
}
while(p1 != NULL){
p1 = p1->next;
p2 = p2->next;
}
printf("%d\n", p2->val); while(root->next != NULL){
tail = root->next;
root->next = tail->next;
delete tail;
}
} delete root;
root = NULL; return ;
}
剑指Offer - 九度1517 - 链表中倒数第k个结点的更多相关文章
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer十四之链表中倒数第k个结点
一.题目 输入一个链表,输出该链表中倒数第k个结点. 二.思路 两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点.然后两个指针同时往后移动,当第一个结 ...
- 【剑指Offer】14、链表中倒数第k个结点
题目描述: 输入一个链表,输出该链表中倒数第k个结点.为了符合习惯,从1开始计数,即链表的尾结点是倒数第1个节点.例如,一个链表有6个结点,从头结点开始,它们的值依次是1,2,3,4,5,6. ...
- 剑指offer【13】- 链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点. /* public class ListNode { int val; ListNode next = null; ListNode(int val) { ...
- 剑指offer(14)链表中倒数第K个节点
题目描述 输入一个链表,输出该链表中倒数第k个节点. 题目分析 用两个指针来跑,两个指针中间相距k-1个节点,第一个指针先跑,跑到了第k个节点时,第二个指针则是第一个节点. 这时候两个一起跑.当第一个 ...
- 剑指Offer - 九度1373 - 整数中1出现的次数(从1到n整数中1出现的次数)
剑指Offer - 九度1373 - 整数中1出现的次数(从1到n整数中1出现的次数)2014-02-05 23:03 题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直 ...
- 剑指Offer - 九度1348 - 数组中的逆序对
剑指Offer - 九度1348 - 数组中的逆序对2014-01-30 23:19 题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个 ...
- 剑指Offer - 九度1370 - 数组中出现次数超过一半的数字
剑指Offer - 九度1370 - 数组中出现次数超过一半的数字2013-11-23 03:55 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组 ...
- 剑指Offer - 九度1351 - 数组中只出现一次的数字
剑指Offer - 九度1351 - 数组中只出现一次的数字2013-11-23 01:23 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. ...
随机推荐
- Unity3D转UE4指南
坐标: Unity3D X - left, right Y - up, down Z - forwards, backwards Unreal Engine4 X - forwards, backwa ...
- STM32-开发环境搭建-STM32CubeMX-安装及配置
STM32CubeMX系列教程之1.流水灯 刚刚接触到STM32CubeMX软件,感觉挺有意思,动动鼠标使STM32开发变得简单,特写文与大家分享.但具体性能如何还需测试. 硬件开发中的流水灯相当于软 ...
- AD的命名规则 AD常用产品型号命名规则
AD的命名规则 AD常用产品型号命名规则 DSP信号处理器 放大器工业用器件通信 电源管理 移动通信 视频/图像处理器等 模拟A/D D/A 转换器 传感器 模拟器件 A ...
- MySQL数据库实验二:单表查询
实验二 单表查询 一.实验目的 理解SELECT语句的操作和基本使用方法. 二.实验环境 是MS SQL SERVER 2005的中文客户端. 三.实验示例 1.查询全体学生的姓名.学号.所在系. ...
- JAVA去掉HTMl以及CSS样式
封装方法如下 public String delHTMLTag(String htmlStr){ String regEx_style="<style[^>]*?>[\\s ...
- AFNetworking 初探
AFNetworking 初探 繼ASIHTTPRequest發佈不再維護的訊息之後,如果我們不使用CDN(雲端伺服器),AFNetworking 會是一套不錯的選擇.下載網址:https://git ...
- 【LOJ6513】「雅礼集训 2018 Day10」足球大战(数学题)
点此看题面 大致题意: 已知主队每秒进球概率为\(p\),客队每秒进球概率为\(q\),求主队进球数大于客队的概率. 推式子 考虑枚举主队进球数\(i\),则客队进球数必然小于\(i\),因此可再枚举 ...
- 6.Netbackup-Oracle数据库恢复演练报告(下)
1.1 Oracle数据库恢复 目录 1 安装新的客户端 2 新建异机恢复文件 3 新建数据库实例 4 建立spfile文件 5 建立数据文件夹 6 启动数据库到nomount状态 7 列出备份信息 ...
- 解决Gearman 报sqlite3错误
删除了系统原带的sqlite3 ,到官网上下一个源码,重新编译安装sqlite3. 如:把sqlite3安装到 /usr/local/sqlite3tar zxf sqlite3.xxxx.tar.g ...
- java获取文件后缀名(正则表达式)+文件名
String fileName="asadas.jsp"; String reg = ".+(.JPEG|.jpeg|.JPG|.jpg|.png|.PNG)$" ...