从尾到头打印链表
2018-05-08 本文已影响0人
twilight_mao
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
思路
1.熟悉链表ListNode
分析.jpg
2.反转ArrayList可用Collections.reverse(list);
3.在此回忆一下数组与链表的区别:
- 数组静态分配内存,链表动态分配内存;
- 数组在内存中连续,链表不连续;
- 数组内存在栈区,链表内存在堆区;
- 数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);
- 数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。
- 数组适合查找,链表适合插入、删除;
代码
public class Solution {
public static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public static void main(String[] args) {
int[] input = new int[]{67, 0, 24, 58};
ListNode listNode = buildListNode(input);
ArrayList list = printListFromTailToHead(listNode);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
public static ListNode buildListNode(int[] input) {
ListNode head = new ListNode(-1);
ListNode p = head;
for (int i = 0; i < input.length; i++) {
ListNode n = new ListNode(input[i]);
p.next = n;
p = p.next;
}
return head.next;
}
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
ListNode n = listNode;
while (n != null) {
list.add(n.val);
n = n.next;
}
Collections.reverse(list);
return list;
}
}