【云栖社区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	
原文地址:https://www.cnblogs.com/zhazhaacmer/p/11052668.html