【云栖社区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+"\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  

转载于:https://www.cnblogs.com/zhazhaacmer/p/11052668.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值