题目描述

       输入应该链表的头节点 , 从尾到头反过来打印出每个节点的值。链表定义如下 :
 typedef struct ListNode
{
int m_nKey ;
ListNode * m_pNext ;
}ListNode;

  分析:

    可能有人的第一反应是将链表中的节点指针翻转过来。但是改变原有的链表结构可能在某些情况下不被允许。

    打印是一个只读操作,首先遍历一遍链表,但要做到逆序打印,可以用栈将节点里面的值存起来。然后将栈push至空。

链表逆序打印代码 :

 void PrintListNode(ListNode *pHead){
stack<int> sk ;
while(pHead !=NULL){
sk.push(pHead->m_nKey);
pHead = pHead->m_pNext ;
}
// 打印
while(!sk.empty()){
cout << sk.top()<<endl ;
sk.pop();
}
}

完整代码 :

此处链表 listNode 为举例 实例化 为了 0->1->2->3->4->5->6->7->8->9->10->null ;

 #include<iostream>
#include<malloc.h>
#include<stack> using namespace std ; #define N 10 typedef struct ListNode
{
int m_nKey ;
ListNode * m_pNext ;
}ListNode; void PrintListNode(ListNode *pHead){
stack<int> sk ;
while(pHead !=NULL){
sk.push(pHead->m_nKey);
pHead = pHead->m_pNext ;
}
// 打印
while(!sk.empty()){
cout << sk.top()<<endl ;
sk.pop();
}
}
int main(){
ListNode *pHead = (ListNode*)malloc(sizeof(ListNode*)) ;
ListNode *listNode = (ListNode*)malloc(sizeof(ListNode*)) ;
listNode->m_nKey = ;
pHead = listNode ;
for(int i=;i<N;i++){
ListNode *pNew = (ListNode*)malloc(sizeof(ListNode*)) ;
pNew->m_nKey = i+ ;
listNode->m_pNext = pNew ;
listNode = listNode->m_pNext ;
}
listNode->m_pNext = NULL ;
PrintListNode(pHead);
return ;
}

打印结果:


Process returned  (0x0)   execution time : 0.189 s
Press any key to continue.

此题除了使用栈,还可以使用递归。

代码差别只在PrintListNode函数。

 #include<iostream>
#include<malloc.h>
#include<stack> using namespace std ; #define N 10 typedef struct ListNode
{
int m_nKey ;
ListNode * m_pNext ;
}ListNode; void PrintListNode(ListNode *pHead){
if(pHead->m_pNext!=NULL){
PrintListNode(pHead->m_pNext);
}
cout << pHead->m_nKey << endl;
}
int main(){
ListNode *pHead = (ListNode*)malloc(sizeof(ListNode*)) ;
ListNode *listNode = (ListNode*)malloc(sizeof(ListNode*)) ;
listNode->m_nKey = ;
pHead = listNode ;
for(int i=;i<N;i++){
ListNode *pNew = (ListNode*)malloc(sizeof(ListNode*)) ;
pNew->m_nKey = i+ ;
listNode->m_pNext = pNew ;
listNode = listNode->m_pNext ;
}
listNode->m_pNext = NULL ;
PrintListNode(pHead);
return ;
}

剑指Offer_6_从尾到头打印链表的更多相关文章

  1. 剑指Offer 从尾到头打印链表

    题目描述 输入一个链表,从尾到头打印链表每个节点的值. 输入描述: 输入为链表的表头 输出描述: 输出为需要打印的“新链表”的表头 思路: 用容器vector,递归到最后一个元素,push_back到 ...

  2. 剑指offer——从尾到头打印链表节点的值

    输入一个链表,从尾到头打印链表每个节点的值. 输入描述:输入为链表的表头 输出描述:输出为需要打印的“新链表”的表头 一.问题分析 初拿到这个题目时,这应该是考察单向链表这一数据结构.单向链表的遍历总 ...

  3. 剑指Offer——从尾到头打印链表

    题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 分析: 方法1:利用栈的性质,先从头到尾遍历链表每个节点的值存入栈中,最后一个一个出栈顺序便是从尾到头的. 方法2:直接从头到尾遍历链表存储节 ...

  4. 剑指offer —— 从尾到头打印链表

    1.问题:输入一个链表,从尾到头打印链表每个节点的值. /** * public class ListNode { * int val; * ListNode next = null; * * Lis ...

  5. 剑指Offer-3.从尾到头打印链表(C++/Java)

    题目: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 分析: 很简单的一道题,其实也就是从尾到头打印链表,题目要求返回ArrayList,其实也就是一个数组. 可以将链表中的元素全部 ...

  6. 剑指offer--18.从尾到头打印链表

    递归,逐个加到后面 ------------------------------------------------------------------------------ 时间限制:1秒 空间限 ...

  7. 用js刷剑指offer(从尾到头打印链表)

    题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 牛客网链接 js代码 /*function ListNode(x){ this.val = x; this.next = nu ...

  8. 4、剑指offer——从尾到头打印链表java实现

    **题目描述** **输入一个链表,按链表从尾到头的顺序返回一个ArrayList.** 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 思路:   1.如果链 ...

  9. [剑指Offer]6-从尾到头打印链表

    典型的后进先出,可以借助栈,也可以使用递归. 考虑到若链表过长递归可能造成函数调用栈溢出,所以使用栈更好. 注意stack无遍历操作,全部用push(),pop(),top()完成. 以下创建列表胡乱 ...

随机推荐

  1. Android 开发笔记___Intent的使用

    public class ActRequestActivity extends AppCompatActivity implements OnClickListener { private EditT ...

  2. html5 postMessage解决跨域、跨窗口消息传递[转载]

    原文:http://www.cnblogs.com/dolphinX/p/3464056.html 一些麻烦事儿 平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经常会遇到的问题 1 ...

  3. css3 滚动条出现 页面不跳动

    .wrap-outer { margin-left: calc(100vw - 100%); }   .wrap-outer { padding-left: calc(100vw - 100%); } ...

  4. ruby 异常处理 begin rescue end

    begin 代码1 rescue 代码 end 如果执行 代码1 发生异常 则转至 代码2 若正常,则执行完跳出

  5. oracle数据库管理系统常见的错误(二)

    oracle数据库,对于新手来说总会遇到这样的问题: 相信大家都遇到了这样的问题,说实话,我曾经就遇到过这样的问题,但是不好意思问旁边的技术大咖,都有点怀疑人生了,然后自己在网上去查找原因,结果发现, ...

  6. 启用 Brotli 压缩算法,对比 Gzip 压缩 CDN 流量再减少 20%

    Google 认为互联网用户的时间是宝贵的,他们的时间不应该消耗在漫长的网页加载中,因此在 2015 年 9 月 Google 推出了无损压缩算法 Brotli.Brotli 通过变种的 LZ77 算 ...

  7. 移动端页面input输入框被键盘遮挡问题

    <body class="layout-fixed"> <!-- fixed定位的头部 --> <header> </header> ...

  8. AIO5销售发货单numeric算数溢出报错:将numeric转换成数据类型numeric时出现算数溢出错误

    问题描述: 销售发货单报错算数溢出:将numeric转换成数据类型numeric时出现算数溢出错误.具体如下图: 当销售发货单的数量为>7万时,报错 当销售发货单的数量为<7万时,单据正常 ...

  9. 流式处理的新贵 Kafka Stream - Kafka设计解析(七)

    原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自技术世界,原文链接 http://www.jasongj.com/kafka/kafka_stream/ Kafka Stream背景 Ka ...

  10. 自学python笔记(二)

    一:在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍.所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样 ...