zoukankan      html  css  js  c++  java
  • 剑指offer(3)之从尾到头打印链表

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

    方法一:非递归

        思路1:先用while循环遍历链表的每一个节点,并把每个节点的值存进ArrayList里,之后反向遍历ArrayList,把值存进另外一个ArrayList里,然后返回

        代码如下:

     1 import java.util.ArrayList;
     2 
     3 class ListNode
     4 {
     5 
     6     int val;
     7     ListNode next;
     8     ListNode(int x)
     9     {
    10         val = x;
    11     }
    12 }
    13 
    14 public class Solution {
    15     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
    16         ArrayList<Integer> list=new ArrayList<Integer>();
    17         ArrayList<Integer> list2=new ArrayList<Integer>();
    18          
    19         while (listNode!=null)
    20         {
    21             list.add(listNode.val);
    22             listNode=listNode.next;
    23         } 
    24         for (int i = list.size()-1; i >= 0; i--)
    25         {
    26             list2.add(list.get(i));
    27         }
    28          
    29         return list2;
    30  
    31     }
    32 }

        思路2:还是遍历的思路,只是直接使用ArrayList的一个方法list.add(0,listNode.val),每次从头插入,生成反向链表

        代码如下:

     1 import java.util.ArrayList;
     2 public class Solution {
     3     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
     4         ArrayList<Integer> list=new ArrayList<Integer>();
     5          
     6          
     7         while (listNode!=null)
     8         {
     9             list.add(0,listNode.val);
    10             listNode=listNode.next;
    11         } 
    12          
    13         return list;
    14  
    15     }
    16 }

    方法二:递归

        思路:每次在方法中使用子节点递归调用方法在ArrayList的add操作之前,这样当递归调用结束后会先运行最后一个节点的add方法,依次add,生成反向ArrayList返回

        代码如下:

     1 import java.util.ArrayList;
     2 public class Solution {
     3     ArrayList<Integer> list=new ArrayList<Integer>();
     4     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
     5          
     6         if (listNode != null)
     7         {
     8             printListFromTailToHead(listNode.next);
     9             list.add(listNode.val);
    10         }
    11         return list;
    12  
    13     }
    14 }
  • 相关阅读:
    10年测试专家深度解读接口测试
    测试技术大牛谈成长经历:一个好的软件测试工程师应该做到这些!
    一位测试老鸟的工作经验分享
    又一名程序员倒下,网友:我们只是新时代农民工
    软件测试工程师这样面试,拿到offer的几率是80%
    App测试流程及测试点(个人整理版)
    自动化测试是什么?
    软件测试工程师的职业技能分析
    月薪15k的测试员需要学习什么技术?
    面向对象
  • 原文地址:https://www.cnblogs.com/quxiangjia/p/12520577.html
Copyright © 2011-2022 走看看