牛客網劍指offer編程題--從尾到頭打印鏈表(倒序打印鏈表)

Java實現鏈表並倒序打印鏈表

java中沒有指針,這給從C/C++過來的程序員來說,感覺非常麻煩。java中屏蔽了指針的概念,但是依然可以用java類來模擬。java的實例實際上就是一個引用(就是指針的性質)。
下面的代碼給出java模擬鏈表的node節點:
package com.zh.niuke;
/**
 * 鏈表的節點(包括數據域和指針域)
 * 
 * @author lenovo
 *
 */
public class ListNode {
	//鏈表節點的數據域
	int val;
	//連邊節點的指針域
	ListNode next = null;

	// 通過構造函數類初始化數據域的值
	ListNode(int val) {
		this.val = val;
	}
}


形式上看是不是感覺和C語言中的struct有幾分像,java的類比stuct多的就是類上可以註冊方法(也就是函數),而struct上是不可以有函數的。

基於上面的鏈表節點在實現下面的題目:

題目描述

輸入一個鏈表,從尾到頭打印鏈表每個節點的值。
package com.zh.niuke;

import java.util.ArrayList;
import java.util.Stack;

public class ListTest {

	public static void main(String[] args) {

		ListNode listNode0 = new ListNode(0);
		ListNode listNode1 = new ListNode(1);
		ListNode listNode2 = new ListNode(2);
		ListNode listNode3 = new ListNode(3);
		listNode0.next = listNode1;
		listNode1.next = listNode2;
		listNode2.next = listNode3;
		listNode3.next = null;
		
		ListTest ls = new ListTest();
		System.out.println(ls.printListFromTailToHead(listNode0));

	}

	public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
		Stack<Integer> stack = new Stack<Integer>();
		// 鏈表數據入棧(因爲要從tail打印到head)
		while (listNode != null) {
			stack.push(listNode.val);
			listNode = listNode.next;
		}

		// 出棧並存入ArrayList中。
		ArrayList<Integer> list = new ArrayList<Integer>();
		while (!stack.isEmpty()) {
			list.add(stack.pop());
		}
		return list;
	}

}
下面是運行的結果:

今天僅僅寫到這裏,其實也想了一個java鏈表的比較全的Demo,限於時間和內容,後續在寫文章吧。本人不是大牛,不足和錯誤之處還望指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章