zoukankan      html  css  js  c++  java
  • 【云栖社区001-数据结构】如何实现一个高效的单向链表逆序输出(Java版)

    如题

    • 动手之前,发现自己很擅长用C语言来写链表.
    • 不过,既然自己做的是Java开发,那么还是用Java实现这个算法吧;毕竟,以后的若干年里都差不多要跟Java打交道了。
    • 于是,先将Java版的链表自学了一下,其实思想差不多; 用对象替换C语言中的指针建立,特别简单又舒服! 然后逆序输出,再实现这个题目

    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+"	");
    			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()+"	");
    		}
    		
    	}
    }
    
    

    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	
    
  • 相关阅读:
    类的创建
    线性规划
    break、continue、pass介绍
    array numpy 模块
    hive字符串函数
    进化的Spark, 从DataFrame说起
    hive sql split 分隔符
    Spark On YARN内存分配
    浅谈Spark应用程序的性能调优
    Spark-Mllib(二)基本统计
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/11052668.html
Copyright © 2011-2022 走看看