剑指offer——从尾到头打印链表
输入一个链表,从尾到头打印链表每个节点的值。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
}
}
可以利用栈的先入后出的特点,顺序遍历链表,将数据压入栈中,最后在从栈中弹出到结果ArrayList中即可
ArrayList的初始化
ArrayList<Integer> arrayList = new ArrayList<Integer>();
其次,集合的大小用size(),数组的大小用length()
ArrayList的t添加:add(E object)
获取:get(int location)
ArrayList的遍历方式
public class ArrayListDemo {
public static void main(String[] args) {
List<String> al = new ArrayList<String>();
al.add("wangw1");
al.add("wangw3");
al.add("wangw4");
al.add("wangw5");
//遍历方式1
Iterator<String> it1 = al.iterator();
while(it1.hasNext()){
System.out.println(it1.next());
}
//遍历方式2
for(Iterator it2 = al.iterator();it2.hasNext();){
System.out.println(it2.next());
}
//遍历方式3
for(String temp:al){
System.out.println(temp);
}
//遍历方式4
for(int i = 0;i<al.size();i++){
System.out.println(al.get(i));
}
}
}
自己的解法:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode == null || listNode.next == null){
return new ArrayList<Integer>();
}
ArrayList<Integer> array = new ArrayList<Integer>();
ListNode list = listNode;
while(list.next != null){
array.add(list.val);
list = list.next;
}
ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(list.val);
for(int i = array.size() - 1; i >= 0; --i ){
arrayList.add(array.get(i));
}
return arrayList;
}
}
利用栈:
import java.util.Stack;
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode == null || listNode.next == null){
return new ArrayList<Integer>();
}
Stack<Integer> stack = new Stack<>();
while(listNode != null){
stack.push(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> arrayList = new ArrayList<>();;
while(!stack.empty()){
arrayList.add(stack.pop());
}
return arrayList;
}
}
别人的递归调用:
注意返回结果arrayList是定义在外面的,而且,里面遍历链表是用的if,不是循环
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> arrayList = new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode != null){
this.printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return arrayList;
}
}

浙公网安备 33010602011771号