从尾到头打印链表

标签: 剑指offer
10人阅读 评论(0) 收藏 举报
分类:

从尾到头打印链表

方法一:典型的“先进后出”,所以使用栈来实现。

方法二:既然用栈来实现,而递归本质上也是一个栈的结构,自然可以用递归来实现。每遍历到一个节点的时候,先递归输出其后面所有节点从尾到头的值,再输出该节点本身的值。


import java.util.ArrayList;
import java.util.Stack;

public class PrintListFromTailToHead {
	//方法一:使用栈
	public static ArrayList<Integer> printListFromTailToHead_stack(ListNode listNode) {
		Stack<Integer> stack = new Stack<>();
		while(listNode != null){
			stack.add(listNode.val);
			listNode = listNode.next;
		}
		
		ArrayList<Integer> ret = new ArrayList<>();
		while(!stack.isEmpty()){
			ret.add(stack.pop());
		}
		return ret;
	}
	
	//方法二:使用递归
	public static ArrayList<Integer> printListFromTailToHead_recursion(ListNode listNode){
		ArrayList<Integer> ret = new ArrayList<>();
		if (listNode != null) {
			ret.addAll(printListFromTailToHead_recursion(listNode.next));
			ret.add(listNode.val);
		}
		return ret;
	}
	
	public static void main(String[] args) {
		ListNode node1 = new ListNode(1);
		ListNode node2 = new ListNode(2);
		ListNode node3 = new ListNode(3);
		ListNode node4 = new ListNode(4);
		node1.next = node2;
		node2.next = node3;
		node3.next = node4;
		ArrayList<Integer> ret = new ArrayList<>();
		ret = printListFromTailToHead_stack(node1);
		System.out.println("栈-反转后:" + ret);
		
		ret = printListFromTailToHead_recursion(node1);
		System.out.println("递归-反转后:" + ret);
	}

}
public class ListNode {
	int val;
	ListNode next = null;
	
	public ListNode(int val) {
		this.val = val;
	}
}

结果:

栈-反转后:[4, 3, 2, 1]
递归-反转后:[4, 3, 2, 1]
查看评论

从尾到头打印链表(java)

题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。 通常打印是一个只读操作,我们不希望打印时修改内容。 接下来我们想到解决这个问题肯定要遍历链表。遍历的顺序是从头到尾的顺序,可输出的顺...
  • u013238950
  • u013238950
  • 2016-03-03 10:17:01
  • 2240

从尾到头打印链表(java)

1.问题描述 输入一个链表,从尾到头打印链表每个节点的值。 2.算法分析 方案一(非递归版):构造一个栈,将链表中所有元素存入栈中,然后使用该栈构造ArrayList 方案二(递归版):在顺序遍历链表...
  • tanjie_123
  • tanjie_123
  • 2016-10-31 16:05:22
  • 220

Python :从尾到头打印链表

牛客网上的剑指 offer的在线编程: 题目描述: 输入一个链表,从尾到头打印链表每个节点的值 # -*- coding:utf-8 -*- # class ListNode: # de...
  • Lynette_bb
  • Lynette_bb
  • 2017-06-18 11:44:20
  • 1047

从尾到头打印链表(Java)

题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。**解析:很多人第一反应是从头到尾输出将会比较简单,于是自然想到把链表中连接结点的指针反转过来,改变链表的方向即可。但该方法会改变原来链表...
  • IDog149tao
  • IDog149tao
  • 2017-03-23 19:25:08
  • 469

剑指offer(C++)——从尾到头打印链表

题目描述 输入一个链表,从尾到头打印链表每个节点的值。 思路: (1)由于链表只能从头到尾进行遍历,于是我们就想如果能把链表的指针翻转过来,我们就可以实现从尾到头的输出了。但是这里有...
  • YF_Li123
  • YF_Li123
  • 2017-04-21 20:48:56
  • 459

剑指offer-Java-从尾到头打印链表

题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。 方式1:非递归的实现 public class PrintListReverse{ public static void main ...
  • zcl1359205840
  • zcl1359205840
  • 2016-08-26 14:47:29
  • 413

剑指offer--python --c++--从尾到头打印链表

输入一个链表,从尾到头打印链表每个节点的值。 python解法:先将链表中的值插入到序列l中,之后再将序列逆置,则输出序列即可 def printListFromTailToHead(se...
  • suanzhaogao
  • suanzhaogao
  • 2017-05-24 11:39:18
  • 668

剑指offer: 从尾到头打印链表(链表)

题目: 题目描述 输入一个链表,从尾到头打印链表每个节点的值。返回新链表。 分析: 逆转链表,与栈顺序一致,可以用辅助栈解决这个问题。 代码: vect...
  • fengsser
  • fengsser
  • 2015-07-10 09:56:52
  • 1048

从尾到头打印链表每个节点的值。

题目描述:输入一个链表,从尾到头打印链表每个节点的值。 分析 (1):可以把链表倒转,然后从头到尾输出链表的值,但此时链表的结构会改变,不建议如此做。 (2):把链表的值从头到尾加入到栈中,输出栈...
  • liulian1
  • liulian1
  • 2016-03-11 10:50:04
  • 1451

剑指offer之从尾到头打印链表(Python)

输入一个链表,从尾到头打印链表每个节点的值。
  • u010636181
  • u010636181
  • 2017-10-14 20:32:02
  • 95
    个人资料
    等级:
    访问量: 499
    积分: 145
    排名: 119万+
    文章存档