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

从尾到头打印链表

作者: 刘小树树树树 | 来源:发表于2019-11-13 17:16 被阅读0次

题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

//结构体
class ListNode {
    int val;
    ListNode next = null;
    ListNode(int val) {
        this.val = val;
    }
}

解析
首先想到的是存储到ArrayList中在反转,可以利用栈Stack的原理,new一个Stack,把链表遍历到栈中,栈再遍历到ArrayList中。

因为ArrayList提供了根据下标插入的方法add(int index, E element),在遍历插入时,每次都插入在0下标位置,也可以实现,但是每次都要挪动数组。

其次,利用递归的原理,也就是一直递归到最后一个节点再依次向前添加(如果节点不为null,则接着调用自身)。

Java

/**
 * 每次在下标0处插入
 * 运行时间:22ms
 * 占用内存:9376k
 */
public ArrayList<Integer> printListFromTailToHead1(ListNode listNode) {
    ArrayList<Integer> arrayList = new ArrayList<>();
    while (listNode != null) {
        arrayList.add(0, listNode.val);
        listNode = listNode.next;
    }
    return arrayList;
}

/**
 * 递归
 * 运行时间:21ms
 * 占用内存:9348k
 */
ArrayList<Integer> arrayList = new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead2(ListNode listNode) {
    if (listNode != null) {
        printListFromTailToHead2(listNode.next);
        arrayList.add(listNode.val);
    }
    return arrayList;
}

/**
 * 利用栈
 * 运行时间:22ms
 * 占用内存:9276k
 */
public ArrayList<Integer> printListFromTailToHead3(ListNode listNode) {
    Stack<Integer> stack = new Stack<>();
    while (listNode != null) {
        stack.push(listNode.val);
        listNode = listNode.next;
    }
    ArrayList<Integer> arrayList = new ArrayList<>();
    while (!stack.isEmpty()) {
        arrayList.add(stack.pop());
    }
    return arrayList;
}

Python

Python字符串的逆向输出真的是妙不可言。
另外递归用“+”添加元素。

class PrintListFromTailToHead:
    # 递归
    # 运行时间:30ms
    # 占用内存:5728k
    def printListFromTailToHead(self, listNode):
        if listNode is None:
            return []
        return self.printListFromTailToHead(listNode.next) + [listNode.val]

    # 逆向输出
    # 运行时间:33ms
    # 占用内存:5736k
    def printListFromTailToHead(self, listNode):
        res = []
        while listNode:
            res.append(listNode.val)
            listNode = listNode.next
        # 逆向输出
        return res[::-1]

    class ListNode:
        def __init__(self, x):
            self.val = x
            self.next = None

相关文章

  • JZ-003-从尾到头打印链表

    从尾到头打印链表 题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。题目链接: 从尾到头打印...

  • 2.3.3 链表

    面试题6:从尾到头打印链表 输入一个链表,从尾到头打印链表每个节点的值。

  • 06:从尾到头打印链表

    题目06:从尾到头打印链表 输入一个链表,从尾到头打印链表每个节点的值。 思路 一. 栈 从头遍历链表,先访问的后...

  • 《剑指offer》— JavaScript(3)从尾到头打印链表

    从尾到头打印链表 题目描述 输入一个链表,从尾到头打印链表每个节点的值。 实现代码 相关知识 链表是一种物理存储单...

  • <<剑指offer>>--javascript(3)-从尾到头打

    从尾到头打印链表 题目描述 输入一个链表,从尾到头打印链表每个节点的值 代码如下 解题思路 链表是一种物理存储单元...

  • 从尾到头打印链表

    从尾到头打印链表 题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 分析 listNode...

  • 从尾到头打印链表

    《剑指offer》面试题6:从尾到头打印链表 题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。(链表...

  • 《剑指Offer》链表考点题解

    题目链接:从尾到头打印链表 题目简述: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 题目思路 ...

  • 剑指Offer -- 从尾到头打印链表(C++)

    题目描述 输入一个链表,从尾到头打印链表每个节点的值。 方法1:注意是从尾到头进行打印,可利用vector的头插法...

  • Day3 剑指offer:逆序链表

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

网友评论

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

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