5、链表反转输出

作者 : 开心源码 本文共1044个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共191人阅读

题目形容

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList

题解

/***    public class ListNode {*        int val;*        ListNode next = null;**        ListNode(int val) {*            this.val = val;*        }*    }**/import java.util.ArrayList;import java.util.Stack;public class Solution {    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {       ArrayList<Integer> list = new ArrayList<>();        if (listNode == null)            return list;        Stack<ListNode> stack = new Stack<>();        while (listNode != null) {            stack.push(listNode);            listNode = listNode.next;        }        while (!stack.isEmpty()) {            list.add(stack.pop().val);        }        return list;    }}

上面用的是栈的思想,也即通过正向遍历链表,把链表的结点存放到栈的结构中,而后取出的时候通过栈的pop()方法,这样通过再从栈中取出,就成了先入栈的后出栈,导致把链表的次序给反转了。

第二种方式 递归

首先递归也相似于一种从尾到头的排序,即我们不断进入递归,一层层的往下寻觅,不断加大了深度,当到了递归的限定条件时,开始把元素增加进入list。这个时候就是利用递归从最里面往外的特性。

/***    public class ListNode {*        int val;*        ListNode next = null;**        ListNode(int val) {*            this.val = val;*        }*    }**/import java.util.ArrayList;import java.util.Stack;public class Solution {     ArrayList<Integer> list = new ArrayList<>();    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {            if(listNode!=null)        {            printListFromTailToHead(listNode.next);            list.add(listNode.val);        }        return list;    }}

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 5、链表反转输出

发表回复