【20】从尾到头打印链表

题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值

方案一:通常遍历链表是从头开始一个一个的遍历,所以如果要反过来打印链表,可以借助栈来实现

方案二:栈实现的方法就是递归,所以也可以用来递归来实现

//链表的结点
struct ListNode{
    int value;
	ListNode *nextNode;
};

//栈实现从尾到头输出
void PrintListReverse(ListNode *headNode){
	if(headNode == NULL){
	    return;
	}
	//栈
	stack<ListNode*> stk;
	ListNode *tmpNode = headNode;
	while(tmpNode != NULL){
		stk.push(tmpNode);
		tmpNode = tmpNode->nextNode;
	}
	//输出
	while(!stk.empty()){
		ListNode *topNode = stk.top();
		cout<<topNode->value<<endl;
		stk.pop();
	}
}

//用递归来实现从尾到头输出
void PrintListReverse(ListNode *headNode){
	if(headNode == NULL){
	    return;
	}
	PrintListReverse(headNode->nextNode);
	cout<<headNode->value<<endl;
}
时间: 2024-10-28 12:59:22

【20】从尾到头打印链表的相关文章

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

题目1511:从尾到头打印链表 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1082 解决:350 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点.第一行是链表第一个节点的值,依次类推.当输入到-1时代表链表输入完毕.-1本身不属于链表. 输出: 对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行. 样例输入: 1 2 3 4 5 -1 样例输出

剑指offer 面试题5—从尾到头打印链表

题目: 输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 考虑用栈 public void invertedList1(ListNode head) { if (head == null) { return; } ListNode p = head; Stack<Integer> stack = new Stack<Integer>(); while (p != null) { stack.push(p.val); p = p.next; } while (!stack.i

从尾到头输出链表

题目:输入一个链表头结点,从尾到头反过来输出每个结点的值. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 答:1.可以先把链表逆置,然后再输出,具体参考       http://www.cnblogs.com/venow/archive/2012/08/26/2657559.html      这里我们使用另一种更为简单的方法:递归 #include "stdafx.h" #include <iost

数据结构-[求解!]打印链表元素主程序出错

问题描述 [求解!]打印链表元素主程序出错 主程序如下; #include "list.h" #include <stdio.h> #include <stdlib.h> struct Node { ElementType Element; Position Next; }; int main(){ List list= malloc( sizeof( struct Node ) ); Position P=list; for(int i=0;i<10;i

Excel中表头表尾固定打印

在平时的工作中,用  Excel编制表格确实给我们带来了很大的方便,但当一个工作表数据较多时,如有上百人的单位工资表,打印时由于纸张大小有限制,不可能在一页上打印完,这就要求进行多页打印,如果每一页都去制作表头,即便使用复制的方法也是很繁琐的,同时当需要插入或减少人员时,还需手工调整每一页的表头,下面我以  Excel2000为例,介绍一种简单固定表头和表侧的方法.首先,需要告诉大家的是,在Excel表中,表头被称之为标题行,表侧被称之为标题列.下面我们开始操作,打开一个需要固定标题行或标题列的

链表笔试题

链表: 1.注意是否有带头结点. 2.单链表的建立:顺序建表(尾插法).逆序建表(头插法).单链表插入.删除操作需要寻找前驱结点. 3.双向链表和单向链表相比,多了一个前驱指针,单向链表在删除结点时候要遍历链表,双向链表在删除不需要遍历. 一.判断两个链表是否相交:(假设两个链表都没有环)  1.判断第一个链表的每个节点是否在第二个链表中  2.把第二个链表连接到第一个后面,判断得到的链表是否有环,有环则相交  3.如果两个链表有一个公共结点,那么该公共结点之后的所有结点都是重合的,那么,它们的

剑指offer学习笔记1

C++的标准不允许复制构造函数传值参数.A(const A& other){},如果是传值参数,把形参复制到实参会调用复制构造函数,就会形成无休止的递归调用从而导致栈溢出. 赋值运算符函数 class CMyString { public: CMyString(char *pData = NULL); CMyString(const CMyString& str); ~CMyString(); CMyString& operator=(const CMyString& ot

c++声明结构体指针变量提示没有构造函数错误

问题描述 c++声明结构体指针变量提示没有构造函数错误 ##在OJ中做题 ###题目描述 输入一个链表,从尾到头打印链表每个节点的值. 我的代码: // struct ListNode { // int val; // struct ListNode *next; // ListNode(int x) : // val(x), next(NULL) { // } // }; class Solution { public: vector<int> printListFromTailToHead

JAVA实现链表面试题_java

这份笔记整理了整整一个星期,每一行代码都是自己默写完成,并测试运行成功,同时也回顾了一下<剑指offer>这本书中和链表有关的讲解,希望对笔试和面试有所帮助. 本文包含链表的以下内容: 1.单链表的创建和遍历 2.求单链表中节点的个数 3.查找单链表中的倒数第k个结点(剑指offer,题15) 4.查找单链表中的中间结点 5.合并两个有序的单链表,合并之后的链表依然有序[出现频率高](剑指offer,题17) 6.单链表的反转[出现频率最高](剑指offer,题16) 7.从尾到头打印单链表(