zoukankan      html  css  js  c++  java
  • 6 逆序输出链表

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

    解法一

    使用栈。逆序输出和先入后出的结果一样,把链表的节点依次入栈再出栈即可。

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

    解法二 

      头插法重新建立链表。这种方法的好处是节省了空间,不需要额外的栈空间的开销。

      遍历原始链表,对每一个节点用头插的方式放到新的链表里。具体的在循环的过程中,先用一个temp节点保存正在修改节点的后续节点,这样正在修改的节点就可以放心大胆的改变其next。  

     public ArrayList<Integer> printListFromTailToHead(ListNode listNode){
            ListNode head = new ListNode(-1);
            ListNode temp;
    
            while (listNode != null){
                temp = listNode.next;
    
                listNode.next = head.next;
                head.next = listNode;
    
                listNode = temp;
            }
    
            ArrayList<Integer> list = new ArrayList<>();
    
            head = head.next;
            while (head!=null){
                list.add(head.val);
                head = head.next;
            }
    
            return list;
    
        }
  • 相关阅读:
    U盘 格式化 ext3 ext4
    MBR
    CentOS开机的时候卡在进度条一直进不去 F5(是关键)
    redis储存中文,客服端读取出现乱码
    redis 做为缓存服务器 注项!
    redis监控
    keepalived virtual_router_id 44
    你真的会用Gson吗?Gson使用指南
    你真的会用Retrofit2吗?Retrofit2完全教程
    Kotlin 初级读本
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10402264.html
Copyright © 2011-2022 走看看