剑指Offer_6_从尾到头打印链表
题目描述
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_从尾到头打印链表的更多相关文章
- 剑指Offer 从尾到头打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值. 输入描述: 输入为链表的表头 输出描述: 输出为需要打印的“新链表”的表头 思路: 用容器vector,递归到最后一个元素,push_back到 ...
- 剑指offer——从尾到头打印链表节点的值
输入一个链表,从尾到头打印链表每个节点的值. 输入描述:输入为链表的表头 输出描述:输出为需要打印的“新链表”的表头 一.问题分析 初拿到这个题目时,这应该是考察单向链表这一数据结构.单向链表的遍历总 ...
- 剑指Offer——从尾到头打印链表
题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 分析: 方法1:利用栈的性质,先从头到尾遍历链表每个节点的值存入栈中,最后一个一个出栈顺序便是从尾到头的. 方法2:直接从头到尾遍历链表存储节 ...
- 剑指offer —— 从尾到头打印链表
1.问题:输入一个链表,从尾到头打印链表每个节点的值. /** * public class ListNode { * int val; * ListNode next = null; * * Lis ...
- 剑指Offer-3.从尾到头打印链表(C++/Java)
题目: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 分析: 很简单的一道题,其实也就是从尾到头打印链表,题目要求返回ArrayList,其实也就是一个数组. 可以将链表中的元素全部 ...
- 剑指offer--18.从尾到头打印链表
递归,逐个加到后面 ------------------------------------------------------------------------------ 时间限制:1秒 空间限 ...
- 用js刷剑指offer(从尾到头打印链表)
题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 牛客网链接 js代码 /*function ListNode(x){ this.val = x; this.next = nu ...
- 4、剑指offer——从尾到头打印链表java实现
**题目描述** **输入一个链表,按链表从尾到头的顺序返回一个ArrayList.** 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 思路: 1.如果链 ...
- [剑指Offer]6-从尾到头打印链表
典型的后进先出,可以借助栈,也可以使用递归. 考虑到若链表过长递归可能造成函数调用栈溢出,所以使用栈更好. 注意stack无遍历操作,全部用push(),pop(),top()完成. 以下创建列表胡乱 ...
随机推荐
- zookeeper分布式搭建
1下载并解压zookeeper安装包 2进入zookeeper配置文件目录,找到zoo_sample.cfg,执行cp zoo_sample.cfg zoo.cfg 3打开zoo.cfg文件,修改d ...
- jQuery选择器(属性过滤选择器)第六节
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- c#工厂模式与抽象工厂模式
一. 工厂方法(Factory Method)模式 工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中. 工厂方法模式是简单工 ...
- 自定义view-滑动开关
介绍 前段时间,我看到了一篇关于可滑动开关Switch组件的文章,效果图如下: 思路也挺简单的:这个控件主要由田径场式背景和滑块组成.他将田径场式背景分为3部分,最左边的半圆,中间的两条直线部分和最右 ...
- [转载] ETL和Kettle
http://tech.ccidnet.com/art/1105/20080407/1411567_1.html http://blog.csdn.net/cissyring/article/deta ...
- Makefile持续学习二
Makefile概述 一.Makefile里有什么? Makefile里主要包含5个东西:显式规则.隐晦规则.变量定义.文件指示和注释 1.显式规则:显式规则说明如恶化生成一个或多的目标文件,包含要生 ...
- python之optparse模块
测试例子 #!/usr/bin/env python2.7 import sys import os from optparse import OptionParser def parse_optio ...
- HTML的用法
今天学习了HTMIL,标签.这个东西吧,没什么很难的,就是得多练多打.今天的一些个人心得: 标签:成对存在的名称 标签注意:1.标签名放在<> 2.标签成对存在的 3.结束标签有斜杠/ 例 ...
- phpcms实现全站搜索
如果制作的静态页面中有搜索功能,那么使用phpcms进行替换怎么替换呢?会不会越到很多的麻烦呢?接下来进行phpcms替换静态页面中的搜索功能. 第一步:搜索页面的form表单提交书写,form表单怎 ...
- javaweb-3-在Eclipse中引入Tomcat
一.在Eclipse中引入Tomcat 第一步: 第二步: 第三步: 第四部: