JZ6 从尾到头打印链表
题目:
思路:
【1】思路一:先是遍历一遍链表压入栈中,然后从栈中弹出到数组中。利用了栈的先进后出的特性来实现从尾到头的顺序返回。
【2】思路二:利用递归的方式,利用调用栈叠加的方式,先从最末尾的节点开始处理,最后处理头节点。
代码展示:
public class ListNode { public int val; public ListNode next = null; public ListNode(int val) { this.val = val; } } //从尾到头打印链表 public class JZ6 { public static void main(String[] args) { ListNode Node1,Node2,Node3,Node4; Node1 = new ListNode(1); Node2 = new ListNode(2); Node1.next = Node2; Node3 = new ListNode(3); Node2.next = Node3; Node4 = new ListNode(4); Node3.next = Node4; System.out.println(Method1(Node1)); } //利用数组的的头插法实现【运行时间 244ms 占用内存 17888KB】 public static ArrayList<Integer> Method2(ListNode listNode) { ArrayList<Integer> list = new ArrayList<Integer>(); while (listNode!=null){ list.add(0,listNode.val); listNode = listNode.next; } return list; } //利用递归实现【运行时间 239ms 占用内存 19512KB】 public static ArrayList<Integer> Method1(ListNode listNode) { if (listNode == null){ ArrayList<Integer> dlist = new ArrayList<Integer>(); return dlist; }else { ArrayList<Integer> dlist = Method1(listNode.next); dlist.add(listNode.val); return dlist; } } //常见的递归方式【运行时间 203ms 占用内存 18704KB】 public static ArrayList<Integer> lists = new ArrayList(); public ArrayList<Integer> Method11(ListNode listNode) { if(listNode!=null){ Method11(listNode.next); lists.add(listNode.val); } return lists; } }