从尾到头打印链表

来源:互联网 发布:内蒙古大数据局局长 编辑:程序博客网 时间:2024/06/05 19:58
package com.softeem.offer;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.ListIterator;//从尾到头打印链表://输入一个链表,从尾到头打印链表的值:public class Demo2 {public static void main(String[] args) {int[] arr={1,23,45,66,77,79};int i=0;ListNode listNode = new Demo2().new ListNode(arr[i++]);listNode.next=null;ListNode p=listNode;while(i<arr.length){//创建单链表ListNode temp=new Demo2().new ListNode(arr[i++]);temp.next=null;p.next=temp;p=temp;}List list1 = printListFromTailToHead(listNode);for(Integer t1:list1){System.out.print(t1+" ");}System.out.println();List list2 =printListFromTailToHead2(listNode);for(Integer t2:list2){System.out.print(t2+" ");}System.out.println();List list3=printListFromTailToHead3(listNode);for(Integer t3:list3){System.out.print(t3+" ");}} //从后向前打印链表:方式1 public static ArrayList printListFromTailToHead(ListNode listNode){ List list1 = new ArrayList();//创建一个list集合存放链表中的数据 List list2 = new ArrayList();//创建一个集合存放从后向前存放的数据 ListNode node = listNode; while(node!=null){ list1.add(node.val);//将链表中的数据依次存放进list1集合中 node=node.next; } ListIterator iter = list1.listIterator(list1.size()); while(iter.hasPrevious()){ //从尾部向前遍历 list2.add(iter.previous());//将遍历的数据存放到list2中 } return (ArrayList) list2; } //从后向前打印节点:方式2 public static ArrayList printListFromTailToHead2(ListNode listNode){ List list = new ArrayList(); ListNode p=listNode; while(p!=null){ list.add(p.val); p=p.next; } Collections.reverse(list);//将集合内的元素利用collections工具内的reverse方法直接反转 return (ArrayList) list; } //方式3:从后向前遍历节点:空间复杂度为O(1),明显比第一种方法好 public static ArrayList printListFromTailToHead3(ListNode listNode){ List list = new ArrayList(); ListNode p=listNode; while(p!=null){ list.add(p.val); p=p.next; } int size=list.size(); for(int i=0;i<size/2;i++){ int temp=list.get(size-i-1);//将第size-i-1的值存取出来 list.set(size-i-1,list.get(i));//把第i位置的值设置到size-i-1 list.set(i, temp);//把存取的值设置到i位置 } return (ArrayList) list; } //创建链表节点: class ListNode{ private int val; private ListNode next=null; ListNode(int val){ this.val=val; } }}
原创粉丝点击