• 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;
    
        }
  • 相关阅读:
    清空数据库所有表数据
    sqlserver编号
    Inherits、CodeFile、CodeBehind的区别
    初识NuGet
    ASP.Net各个命名空间及作用
    SQL SERVER数据库性能优化之SQL语句篇
    Exercise 20: Functions And Files
    Exercise 19: Functions And Variables
    Exercise 18: Names, Variables, Code, Functions
    Exercise 17: More Files
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10402264.html
Copyright © 2020-2023  润新知