热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

[剑指Offer]7.从尾到头打印链表

题目1511:从尾到头打印链表时间限制:1秒内存限制:128兆特殊判题:否提交:1082解决:350题目描述:输入一个链表,从尾到头打印链表每个节点的值。输入:每个输入文件仅包含一组

题目1511:从尾到头打印链表

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:1082

解决:350

题目描述:

输入一个链表,从尾到头打印链表每个节点的值。

输入:

每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。

输出:

对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。

样例输入:
1
2
3
4
5
-1
样例输出:
5
4
3
2
1
【代码】


/*********************************
* 日期:2013-10-18
* 作者:SJF0115
* 题号: 九度OJ 题目1511:从尾到头打印链表
* 来源:http://ac.jobdu.com/problem.php?pid=1511
* 结果:AC
* 来源:剑指Offer
* 总结:
**********************************/
#include
#include
#include
#include
using namespace std;

typedef struct ListNode{
int value;
struct ListNode *next;
}ListNode;

//从尾到头输出链表
int ListReverse(ListNode *head){
stack stack;
ListNode *p;
p = head->next;
//遍历链表,把每个节点数值添加到栈中
while(p != NULL){
stack.push(p->value);
p = p->next;
}
//输出栈
while(!stack.empty()){
printf("%d\n",stack.top());
stack.pop();
}
return 0;
}

int main()
{
int i,n;
//初始化
ListNode *head = (ListNode *)malloc(sizeof(ListNode));
ListNode *p;
head->next = NULL;
p = head;
while(scanf("%d",&n)!= EOF){
//n = -1一个测试用例的结束
if(n != -1){
//创建链表
ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->value = n;
newNode->next = p->next;
p->next = newNode;
p = newNode;
}
//输出
else{
/*p = head->next;
while(p != NULL){
printf("%d\n",p->value);
p = p->next;
}*/
//从尾到头输出
ListReverse(head);
//初始化
head->next = NULL;
p = head;
}
}
return 0;
}


【解析】



代码二

/*---------------------------------------
* 日期:2015-07-20
* 作者:SJF0115
* 题目: 7.从尾到头打印链表
* 结果:AC
* 网址:http://www.nowcoder.com/books/coding-interviews/d0267f7f55b3412ba93bd35cfa8e8035?rp=1
* 来源:剑指Offer
* 博客:
-----------------------------------------*/
#include
#include
#include
using namespace std;

struct ListNode{
int val;
ListNode *next;
ListNode(int x):val(x),next(nullptr){}
};

class Solution {
public:
vector printListFromTailToHead(ListNode* head) {
vector result;
// 递归实现
helper(head,result);
return result;
}
private:
void helper(ListNode* head,vector &result){
if(head){
if(head->next){
helper(head->next,result);
}//if
result.push_back(head->val);
}//if
}
};

int main(){
Solution s;
ListNode* root = new ListNode(1);
ListNode* node1 = new ListNode(2);
ListNode* node2 = new ListNode(3);
ListNode* node3 = new ListNode(4);
ListNode* node4 = new ListNode(5);
root->next = node1;
node1->next = node2;
node2->next = node3;
node3->next = node4;
vector result = s.printListFromTailToHead(root);
for(int i = 0;i cout< }//for
return 0;
}

代码三

/*---------------------------------------
* 日期:2015-07-20
* 作者:SJF0115
* 题目: 7.从尾到头打印链表
* 结果:AC
* 网址:http://www.nowcoder.com/books/coding-interviews/d0267f7f55b3412ba93bd35cfa8e8035?rp=1
* 来源:剑指Offer
* 博客:
-----------------------------------------*/
#include
#include
#include
using namespace std;

struct ListNode{
int val;
ListNode *next;
ListNode(int x):val(x),next(nullptr){}
};

class Solution {
public:
vector printListFromTailToHead(ListNode* head) {
vector result;
ListNode* p = head;
while(p){
result.insert(result.begin(),p->val);
p = p->next;
}//while
return result;
}
};

int main(){
Solution s;
ListNode* root = new ListNode(1);
ListNode* node1 = new ListNode(2);
ListNode* node2 = new ListNode(3);
ListNode* node3 = new ListNode(4);
ListNode* node4 = new ListNode(5);
root->next = node1;
node1->next = node2;
node2->next = node3;
node3->next = node4;
vector result = s.printListFromTailToHead(root);
for(int i = 0;i cout< }//for
return 0;
}









推荐阅读
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
author-avatar
PANJIANSHUANG_406
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有