题目描述

       输入应该链表的头节点 , 从尾到头反过来打印出每个节点的值。链表定义如下 :
 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. redis源码分析之发布订阅(pub/sub)

    redis算是缓存界的老大哥了,最近做的事情对redis依赖较多,使用了里面的发布订阅功能,事务功能以及SortedSet等数据结构,后面准备好好学习总结一下redis的一些知识点. 原文地址:htt ...

  2. jQuery点击下拉菜单的展示与隐藏

    首先点击显示某个div,然后要求再次点击时消失,或者点击document的其他地方会隐藏掉这个层,涉及到冒泡的问题,阻止document冒泡到dom上.代码如下: var $el = $(" ...

  3. Problem A: 求平均年龄

    Description 定义一个Persons类,用于保存若干个人的姓名(string类型)和年龄(int类型),定义其方法 void addAPerson(string,int) 用于添加1个人的信 ...

  4. Jumpserver部署与安装

    jumpserver特点: 完全开源,GPL授权 Python编写,容易再次开发 实现了跳板机基本功能,认证.授权.审计 集成了Ansible,批量命令等 支持WebTerminal Bootstra ...

  5. Python学习--列表和元组

    在python中,最基本的数据结构是序列.序列中的每个元素被分配一个序号--即元素的位置,也称为索引.第一个索引是0. python包含6种内建的序列:列表.元组.字符串.Unicode字符串.buf ...

  6. centos7安装python3和Django后,ModuleNotFoundError: No module named '_sqlite3'

    1.准备安装环境 yum groupinstall 'Development Tools' yum install zlib-devel bzip2-devel openssl-devel ncurs ...

  7. Lucene全文检索学习笔记

    全文索引 介绍Lucene的作者:Lucene的贡献者Doug Cutting是 一位资深全文索引/检索专家,曾经是V-Twin搜索引擎(Apple的Copland操作系统的成就之一)的主要开发者,后 ...

  8. MySQL阿里云安装问题小记

    1. [root@iZ2zeg11g0cdei5171kqskZ mysql]# ./scripts/mysql_install_db --user=mysql FATAL ERROR: please ...

  9. 源码怎么找之rest_framework的用户认证

    首先得有一点常识,比如用户认证,就是authenticate 比如一个函数,应该有返回值, 比如一个类里面的self,真的是代表本身这个类吗 再比如看到一个东西加括号,就两种情况,一种是函数,一种是类 ...

  10. prometheus client_golang使用

    序言 Prometheus是一个开源的监控系统,拥有许多Advanced Feature,他会定期用HTTP协议来pull所监控系统状态进行数据收集,在加上timestamp等数据组织成time se ...