如何实现一个高效的单向链表逆序输出?(详解)

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  

以上是关于如何实现一个高效的单向链表逆序输出?(详解)的主要内容,如果未能解决你的问题,请参考以下文章

单向链表的简单Java实现-sunziren

单向链表的构建以及翻转算法_图文详解

阿里笔试——总结1

反转单向双向链表

用Java语言实现单向链表

第30课 双向链表的实现