如何实现一个高效的单向链表逆序输出?(详解)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现一个高效的单向链表逆序输出?(详解)相关的知识,希望对你有一定的参考价值。
需要考虑因素,高效应权衡多方面因素- 数据量是否会很大
- 空间是否有限制
- 原始链表的结构是否可以更改
- 时间复杂度是否有限制
- 一个链表节点需要输出的元素有多个,例如链表中存的是自定义对象,有多个字段 题目。
-
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
以上是关于如何实现一个高效的单向链表逆序输出?(详解)的主要内容,如果未能解决你的问题,请参考以下文章