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,限於時間和內容,後續在寫文章吧。本人不是大牛,不足和錯誤之處還望指正。