题目描述:
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
解题思路:
方法一:借助栈
方法二:递归,后面的先进入arraylist
方法三:列表的插入方法,每次都插入到首位
代码实现:
package offer.linkedlist;
import java.util.ArrayList;
import java.util.Stack;
public class PrintList {
public static void main(String[] args) {
ListNode listNode1=new ListNode(1);
ListNode listNode2=new ListNode(2);
ListNode listNode3=new ListNode(3);
ListNode listNode4=new ListNode(4);
ListNode listNode5=new ListNode(5);
listNode1.next=listNode2;
listNode2.next=listNode3;
listNode3.next=listNode4;
listNode4.next=listNode5;
ArrayList<Integer> integers1 = printlist1(listNode1);
System.out.println("栈方式:");
for(int a:integers1)
System.out.println(a);
System.out.println("递归方式:");
ArrayList<Integer> integers2 = printlist2(listNode1);
for(int a:integers1)
System.out.println(a);
System.out.println("列表的首位插入方式:");
ArrayList<Integer> integers3 = printlist3(listNode1);
for(int a:integers1)
System.out.println(a);
}
//方法一:借助栈的后入先出实现
public static ArrayList<Integer> printlist1(ListNode listNode){
ArrayList<Integer> list=new ArrayList<>();
if(listNode==null) return list;
ListNode head=listNode;
Stack<ListNode> stack=new Stack<>();
while(head!=null){
stack.push(head);//进栈
head=head.next;
}
while(!stack.isEmpty()){
ListNode temp = stack.pop();//出栈,并返回元素
list.add(temp.val);
}
return list;
}
//方法二:递归实现
public static ArrayList<Integer> printlist2(ListNode listNode){
ArrayList<Integer> list=new ArrayList<>();
getnext(listNode,list);
return list;
}
private static void getnext(ListNode listNode, ArrayList<Integer> list) {
if(listNode!=null){
getnext(listNode.next,list);
list.add(listNode.val);
}
}
//方法三:列表的首位插入
public static ArrayList<Integer> printlist3(ListNode listNode){
ArrayList<Integer> list=new ArrayList<>();
if(listNode==null)
return list;
ListNode head=listNode;
while(head!=null){
list.add(0,head.val);//数组每次插入数据时,都插入到首位
head=head.next;
}
return list;
}
}
来源:CSDN
作者:小黄学程序
链接:https://blog.csdn.net/weixin_44716359/article/details/103909025