美文网首页
从尾到头打印链表

从尾到头打印链表

作者: twilight_mao | 来源:发表于2018-05-08 09:04 被阅读0次

    https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tqId=11156&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

    题目描述

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

    思路

    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;
        }
    }
    

    相关文章

      网友评论

          本文标题:从尾到头打印链表

          本文链接:https://www.haomeiwen.com/subject/lgqirftx.html