题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
方法一:
*单链表就地逆置并按序放入数组中 单链表就地逆置
*将头结点后面指向null 依次遍历单链表再以头插法插入链表中
*方法二:
* 调用库函数 Arraylist 中add两个参数的方法
import java.util.ArrayList; /** * 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 * @author Sonya * 方法一: *单链表就地逆置并按序放入数组中 单链表就地逆置 *将头结点后面指向null 依次遍历单链表再以头插法插入链表中 *方法二: * 调用库函数 Arraylist 中add两个参数的方法 */ //节点定义 class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class N3_Print_Linklist_2_Arraylist { //方法一 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { if(listNode==null) {return new ArrayList();} ArrayList ar=new ArrayList(); ListNode p=listNode.next; ListNode ln=new ListNode(0); ln.next=listNode; listNode.next=null; while(p.next!=null) {//头插法 ListNode q=p.next; p.next=ln.next; ln.next=p; p=q; } p.next=ln.next; ln.next=p; ListNode lr=ln.next; while(lr.next!=null) { ar.add(lr.val); lr=lr.next; } ar.add(lr.val); return ar; } //方法二 调用库函数 Arraylist 中add两个参数的方法 public ArrayList<Integer> printListFromTailToHead2(ListNode listNode){ ArrayList<Integer> list = new ArrayList<Integer>(); while(listNode != null){ //list中直接有一个在指定位置插入 即直接使用头插法 list.add(0,listNode.val); listNode = listNode.next; } return list; } public static void main(String[] args) { // TODO Auto-generated method stub ListNode listNode=new ListNode(1); ListNode L2=new ListNode(2); ListNode L3=new ListNode(3); ListNode L4=new ListNode(4); ListNode L5=new ListNode(5); listNode.next=L2; L2.next=L3; L3.next=L4; L4.next=L5; N3_Print_Linklist_2_Arraylist n3=new N3_Print_Linklist_2_Arraylist(); System.out.println(n3.printListFromTailToHead(null)); System.out.println(n3.printListFromTailToHead(listNode)); } }