剑指offer三从头到尾打印链表

一、题目:

  输入一个链表,从尾到头打印链表每个节点的值。

二、解题方法:

  方法一:采用递归的方式实现

方法二:借助堆栈的“后进先出”实现

import java.util.ArrayList;
import java.util.Stack; /**
* 输入一个链表,从尾到头打印链表每个节点的值
*/
class Test13 {
public static void main(String[] args) {
//创建单链表
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
node1.next = node2;
node2.next = node3; //采用递归的方式实现
PrintListTailtoHead p = new PrintListTailtoHead();
ArrayList<Integer> list = p.printListFromTailToHead(node1);
System.out.println(list.toString()); System.out.println("-------------"); //借助堆栈的“后进先出”实现(容易理解)
PrintListTailtoHead2 p2 = new PrintListTailtoHead2();
ArrayList<Integer> list2 = p2.printListFromTailToHead2(node1);
System.out.println(list2.toString());
}
} //节点
class ListNode {
int value;
ListNode next = null; ListNode() {} ListNode(int value) {
this.value = value;
}
} //方法1:采用递归的方式实现
class PrintListTailtoHead {
public ArrayList<Integer> printListFromTailToHead(ListNode headNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
//递归
if (headNode != null) {
if (headNode.next != null) {
list =printListFromTailToHead(headNode.next);
}
list.add(headNode.value);
}
return list;
}
} //方法2:借助堆栈的“后进先出”实现
class PrintListTailtoHead2{
public ArrayList<Integer> printListFromTailToHead2(ListNode headNode) {
//存入栈中
Stack<Integer> stack=new Stack<Integer>();
while (headNode!=null){
stack.push(headNode.value);
headNode=headNode.next; //重要,不要忘记
} //从栈中取出存入集合中
ArrayList<Integer> arrayList=new ArrayList<Integer>();
while (!stack.empty()) {
arrayList.add(stack.pop()); } //返回结果
return arrayList;
}
}
上一篇:Github上的600多个iOS开源类库


下一篇:GitHub 上排名前 100 的 IOS 开源库简介