剑指Offer - 九度1518 - 反转链表
剑指Offer - 九度1518 - 反转链表
2013-11-30 03:09
- 题目描述:
 - 
输入一个链表,反转链表后,输出链表的所有元素。
(hint : 请务必使用链表) 
- 输入:
 - 
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数。
输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素。 
- 输出:
 - 
对应每个测试案例,
以此输出链表反转后的元素,如没有元素则输出NULL。 
- 样例输入:
 - 
5
1 2 3 4 5
0 
- 样例输出:
 - 
5 4 3 2 1
NULL 
题意分析:
翻转链表也是经典的链表题了,仔细写都能写出来,不过要严格杜绝new、delete的使用。我曾经喜欢偷懒new一个头节点指向链表头,这样后面反转链表的代码会稍微简化一点。new和delete的问题在于new和delete的操作代价太高,如果函数经常被调用,性能缺陷就会迅速暴露出来。改天要学习一下new和delete的实现机制,明白一次new操作到底有多“贵”。
时间复杂度O(n),空间复杂度O(1)。
// 651941 zhuli19901106 1518 Accepted 点击此处查看所有case的执行结果 1024KB 1226B 160MS
//
#include <cstdio>
using namespace std; struct Node{
int val;
struct Node *next;
Node(int _val): val(_val), next(NULL){}
}; Node *reverse_list(Node *head)
{
Node *root, *tail; if(head == NULL){
return NULL;
} root = new Node();
while(head != NULL){
tail = head->next;
head->next = root->next;
root->next = head;
head = tail;
}
head = root->next;
delete root;
return head;
} int main()
{
Node *head, *tail, *root;
int i, n, tmp; while(scanf("%d", &n) == ){
if(n <= ){
printf("NULL\n");
continue;
}
root = new Node();
tail = root;
for(i = ; i < n; ++i){
scanf("%d", &tmp);
tail->next = new Node(tmp);
tail = tail->next;
}
head = root->next;
head = reverse_list(head);
root->next = head;
printf("%d", head->val);
tail = head->next;
while(tail != NULL){
printf(" %d", tail->val);
tail = tail->next;
}
printf("\n"); tail = root;
while(tail != NULL){
head = tail->next;
delete tail;
tail = head;
}
} return ;
}
剑指Offer - 九度1518 - 反转链表的更多相关文章
- 剑指Offer - 九度1524 - 复杂链表的复制
		
剑指Offer - 九度1524 - 复杂链表的复制2014-02-07 01:30 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点 ...
 - 剑指Offer - 九度1511 - 从尾到头打印链表
		
剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例.每一组测试案例 ...
 - 剑指Offer - 九度1519 - 合并两个排序的链表
		
剑指Offer - 九度1519 - 合并两个排序的链表2013-11-30 22:04 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.(hi ...
 - 剑指Offer - 九度1517 - 链表中倒数第k个结点
		
剑指Offer - 九度1517 - 链表中倒数第k个结点2013-11-30 02:57 题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含 ...
 - 剑指Offer - 九度1505 - 两个链表的第一个公共结点
		
剑指Offer - 九度1505 - 两个链表的第一个公共结点2013-11-24 20:09 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例.对于每个测试案例 ...
 - 剑指Offer - 九度1503 - 二叉搜索树与双向链表
		
剑指Offer - 九度1503 - 二叉搜索树与双向链表2014-02-05 23:39 题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树 ...
 - 剑指Offer - 九度1361 - 翻转单词顺序
		
剑指Offer - 九度1361 - 翻转单词顺序2013-11-23 02:45 题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fi ...
 - 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先
		
剑指Offer - 九度1509 - 树中两个结点的最低公共祖先2014-02-07 01:04 题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样 ...
 - 剑指Offer - 九度1508 - 把字符串转换成整数
		
剑指Offer - 九度1508 - 把字符串转换成整数2014-02-06 23:46 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例 ...
 
随机推荐
- 笨办法学Python(三十六)
			
习题 36: 设计和调试 现在你已经学会了“if 语句”,我将给你一些使用“for 循环”和“while 循环”的规则,一面你日后碰到麻烦.我还会教你一些调试的小技巧,以便你能发现自己程序的问题.最后 ...
 - phpStudy-在使用phpMyAdmin报404Error
			
今天刚刚知道什么是phpStudy和phpMyAdmin,感觉还可以吧.熬到凌晨两点多就为看这点东西.结果不知道怎么回事,当我在网上转一圈回来后发现自己的数据管理器竟然进不进去了! 神马情况啊?我的解 ...
 - 富文本 文字图片点击,(TextView)
			
textview上的富文本支持 文字,图片的点击事件 - (void)protocolIsSelect:(BOOL)select { NSMutableAttributedString *attrib ...
 - 【JS-Java-EL】JavaScript和Java(EL表达式)引发的 Uncaught SyntaxError: Unexpected token ILLEGAL
			
2018.10.14 BUG原因: 在较早期的代码中,容易出现 JS 拼接 HTML 代码字符串的情况.如 // 页面 test.jsp 内部的 JS 代码 // ${} JSP中EL语法,内部为Ja ...
 - 前端JavaScript之DOM使用案例
			
1.弹出框点击关闭 (这个例子关键自己创建标签以及属性,不是太好想啊,而且作用相对来数也不是太大) <!DOCTYPE html> <html> <head> &l ...
 - 通过增量备份恢复来处理Oracle DG 复制GAP
			
1.确定增备scn范围,通过alert日志获取gap日志序列GAP - thread 1 sequence 109631-117170 2.根据序列获取增备起点SCN提示最小gap序列为109631, ...
 - ES6初识-Decorator
			
开始先按照个插件 npm install babel-plugin-transform-decorators-lagacy --save-dev 1.扩充和修改类的行为 2.修改的行为@readonl ...
 - 深入理解java虚拟机学习笔记(一)JVM内存模型
			
上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了.这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要 ...
 - JS - 给String.prototype添加replaceAll方法
			
String.prototype.replaceAll = function (targetStr, newStr) { var sourceStr = this.valueOf(); while ...
 - linux基础目录
			
第1章 linux目录结构 1.1 linux目录结构的特点 一切皆文件 1)倒挂的树状结构 一切从根开始 2)linux每个目录可以挂载在不同的设备(磁盘)上.windows不容易做到. /da ...