题目描述
输入一个链表,按链表值从尾到头的顺序返回一个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));
}
}