【雲棲社區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	


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM