/** * @program: JavaCode * @description:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 * @author: Yukai Fan * @create: 2018-08-15 20:28 **/ public class LinkListPrint { public static void main(String[] args) { LinkListPrint llp = new LinkListPrint(); ListNode listNode = new ListNode(1); listNode.next = new ListNode(2); listNode.next.next = new ListNode(3); listNode.next.next.next = new ListNode(4); ArrayList<Integer> arrayList = printLinkListFromTailToHead(listNode); ArrayList<Integer> arrayList2 = printLinkListFromTailToHead2(listNode); ArrayList<Integer> arrayList3 = llp.printLinkListFromTailToHead3(listNode); System.out.println(arrayList); System.out.println(arrayList2); System.out.println(arrayList3); } /* 方法一:利用堆栈后进先出的特性,将链表的值先push堆栈,然后在一一将值pop到ArrayList集合中输出 */ public static ArrayList<Integer> printLinkListFromTailToHead(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; } /* 方法二:利用Collections集合的API方法reverse()可以反转集合中的数值 */ public static ArrayList<Integer> printLinkListFromTailToHead2(ListNode listNode) { ArrayList<Integer> list = new ArrayList<>(); while (listNode != null) { list.add(listNode.val); listNode = listNode.next; } if (list != null && list.size() > 0) { Collections.reverse(list); } return list; } /* 方式三:利用递归的方式(超简洁) 作者:grass_stars 递归的点在printListFromTailToHaed(listNode.next)这个节点, 那么在最后一次递归方法返回以后,每一层的递归方法都会做一个arrayList.add(lizxstNode.val)这个操作, 从最后一次到第一次,逆向的调用了后面的方法。因为之前的递归点已经返回了。 */ ArrayList<Integer> list = new ArrayList<>(); public ArrayList<Integer> printLinkListFromTailToHead3(ListNode listNode) { if (listNode != null) { this.printLinkListFromTailToHead3(listNode.next); list.add(listNode.val); } return list; } }
为什么main方法是静态的(static)
Java指定了一些可访问的修饰符如:private、protected、public,任何方法或变量都可以声明为public,Java可以从该类之外的地方访问。因为main方法是公共的,JVM就可以轻松的访问执行它。
为什么main方法没有返回值(Void)
因为main返回任何值对程序都没任何意义,所以设计成void,意味着main不会有任何值返回
为什么main方法是静态的(static),它调用的方法是不是一定要static的
static表示这个方法不属于这个内,而是所有内对象共有的。会在类对象定义之前,这样的方法就已经构建完成,就是这个方法游离于类对象之外,否则想要使用main函数,就要先定义类,而main又是所有程序的入口,这样就会矛盾了。
而非static的方法,成员都要通过类对象调用;而静态的可以直接通过类名调用,而同一个类中,类名也可以省掉。
没有static修饰的方法,在调用的时候需要先创造对象。有static修饰的方法,在调用的时候直接调用也就是说:没有static修饰的,它们在生成的时候,就属于对象。有static修饰的,它们在生成的时候,就属于类。main方法是java自带的,我们创建它的时候,就已经注定了它的必然性——静态方法。在静态方法中,只能访问静态的变量,还有静态的其他方法。
java HelloWrold
,JVM就会在HelloWorld.class文件中搜索public static void main (String[] args) 放法public static void main(String... args)
public strictfp final synchronized static void main(String[] args)
转载请注明出处:http://www.cnblogs.com/numen-fan/
/**
* @program: JavaCode
* @description:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
* @author: Yukai Fan
* @create: 2018-08-15 20:28
**/
public class LinkListPrint {
public static void main(String[] args) {
LinkListPrint llp = new LinkListPrint();
ListNode listNode = new ListNode(1);
listNode.next = new ListNode(2);
listNode.next.next = new ListNode(3);
listNode.next.next.next = new ListNode(4);
ArrayList<Integer> arrayList = printLinkListFromTailToHead(listNode);
ArrayList<Integer> arrayList2 = printLinkListFromTailToHead2(listNode);
ArrayList<Integer> arrayList3 = llp.printLinkListFromTailToHead3(listNode);
System.out.println(arrayList);
System.out.println(arrayList2);
System.out.println(arrayList3);
}
/*
方法一:利用堆栈后进先出的特性,将链表的值先push堆栈,然后在一一将值pop到ArrayList集合中输出
*/
public static ArrayList<Integer> printLinkListFromTailToHead(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;
}
/*
方法二:利用Collections集合的API方法reverse()可以反转集合中的数值
*/
public static ArrayList<Integer> printLinkListFromTailToHead2(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
while (listNode != null) {
list.add(listNode.val);
listNode = listNode.next;
}
if (list != null && list.size() > 0) {
Collections.reverse(list);
}
return list;
}
/*
方式三:利用递归的方式(超简洁)
作者:grass_stars
递归的点在printListFromTailToHaed(listNode.next)这个节点,
那么在最后一次递归方法返回以后,每一层的递归方法都会做一个arrayList.add(lizxstNode.val)这个操作,
从最后一次到第一次,逆向的调用了后面的方法。因为之前的递归点已经返回了。
*/
ArrayList<Integer> list = new ArrayList<>();
public ArrayList<Integer> printLinkListFromTailToHead3(ListNode listNode) {
if (listNode != null) {
this.printLinkListFromTailToHead3(listNode.next);
list.add(listNode.val);
}
return list;
}
}
原文:https://www.cnblogs.com/FanJava/p/9484444.html