如何实现一个高效的单向链表逆序输出?(详解)
需要考虑因素,高效应权衡多方面因素
数据量是否会很大空间是否有限制原始链表的结构是否可以更改时间复杂度是否有限制一个链表节点需要输出的元素有多个,例如链表中存的是自定义对象,有多个字段 题目。01. 先学着实现一个简单的Java版的单项链表
构建任意长度的任意数值的链表, 头插法,顺序遍历输出链表
package com.szs.list;/** * 单链表 * @author Administrator * */public class MyLinkedList { public int data; public MyLinkedList next; public MyLinkedList(int data) { this.data=data; this.next=null; } public MyLinkedList() { this.data=-1; this.next=null; }}
02.编写上面的单项链表的逆序输出
高效的输出链表,直接使用栈来存储~~
package com.szs.list;import java.util.Random;import java.util.Stack;public class InverseSingleList { public static void main(String[] args) { MyLinkedList head= new MyLinkedList(); createList(head); inverseList(head); } /** * 构建任意长度的任意数值的链表, 头插法 */ public static void createList(MyLinkedList head) { Random random = new Random(System.currentTimeMillis()); int len = random.nextInt(10); for(int i=0;i<len;i++) { int data = random.nextInt(100); MyLinkedList next = new MyLinkedList(data); next.next = head.next; head.next = next; } /** * 顺序遍历输出链表 */ MyLinkedList head2 = head.next; System.out.println("顺序"); while(head2!=null) { System.out.print(head2.data+"\t"); head2=head2.next; } System.out.println("length="+len); } /** * 高效的输出链表,使用栈来存储 */ public static void inverseList(MyLinkedList head) { MyLinkedList head2 = head.next; Stack<Integer> stack = new Stack<>(); System.out.println("逆序"); while(head2!=null) { stack.push(head2.data); head2=head2.next; } while(!stack.isEmpty()) { System.out.print(stack.pop()+"\t"); } }}
03.进行测试
顺序25 69 10 28 23 89 32 2 23 length=9逆序23 2 32 89 23 28 10 69 25 -------顺序28 35 83 99 88 length=5逆序88 99 83 35 28
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。