本文共 1837 字,大约阅读时间需要 6 分钟。
输入一个链表,按链表从尾到头的顺序返回一个ArrayList
解法一:最简单的想法,先排序,再逆序
import java.util.ArrayList;import java.util.Collections;public class Solution { public ArrayListprintListFromTailToHead(ListNode listNode) { ArrayList integerList = new ArrayList<>(); while (listNode != null) { integerList.add(listNode.val); listNode = listNode.next; } // 不想调用库函数也行,自己写一个叭 Collections.reverse(integerList); return integerList; }}
解法二:借助栈先进后出的原理,辅助实现逆序
import java.util.Stack;import java.util.ArrayList;public class Solution { private Stackstack = new Stack<>(); private ArrayList list = new ArrayList<>(); public ArrayList printListFromTailToHead(ListNode listNode) { while(listNode != null) { stack.push(listNode.val); listNode = listNode.next; } while(stack.size() > 0) { list.add(stack.pop()); } return list; }}
解法三:使用递归思想,递归其实也类似于栈的调用
public class Solution { ArrayListarrayList = new ArrayList (); public ArrayList printListFromTailToHead(ListNode listNode) { if(listNode != null){ this.printListFromTailToHead(listNode.next); arrayList.add(listNode.val); } return arrayList; }}
解法四:使用头插法实现
对于 ArrayList 来说,数组元素移动的开销太大,不建议使用,但思路是不错的
public class Solution { private ArrayListlist = new ArrayList<>(); public ArrayList printListFromTailToHead(ListNode listNode) { while(listNode != null) { list.add(0, listNode.val); listNode = listNode.next; } return list; }}
小结:涉及到逆序问题,可以往以下方面考虑
转载地址:http://uphc.baihongyu.com/