Java學習之單鏈表建立以及正向遍歷和反向遍歷方法
阿新 • • 發佈:2019-02-02
連結串列是一種儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。原先是在C語言的學習中有遇到過,Java中的連結串列第一次遇到是在一家公司的面試題中。連結串列的種類有單鏈表、雙端連結串列、有序連結串列,以下就單鏈表做一個簡單的討論。
1、建立資料節點
public class Node { publicint value;//節點標號 publicNode next;//用於指向下一個節點的指標 publicint getValue() { returnvalue; } publicvoid setValue(int value) { this.value= value; } publicNode getNext() { returnnext; } publicvoid setNext(Node next) { this.next= next; } }
2、建立單鏈表以及遍歷方法,正向遍歷網上較多,所以以下提出了兩種反向遍歷方法
public class NodeTest { Nodehead = null; Nodepoint = null; NodenewNode = null; Nodenod = null; publicstatic int CountNum = 0; publicstatic void main(String[] args){ NodeTestnodeTest = new NodeTest(); //新增節點資料 //Stack<Node>stk = new Stack<Node>(); for(intj = 0; j < 100; j++){ nodeTest.AddNode(j); } //顯示節點資料 // for(intn = 0;n < 100; n++){ // if(n== 0){ // nodeTest.nod= (Node)nodeTest.head; // System.out.println(nodeTest.nod.value); // } // else{ // nodeTest.nod= (Node)nodeTest.nod.next; // System.out.println(nodeTest.nod.value); // } // } //查詢資料 // Scannersim = new Scanner(System.in); // System.out.println("輸入你所需要查詢的node(0~99):"); // intinput = sim.nextInt(); //正向遍歷查詢資料 // for(intn = 0;n < 100; n++){ // if(n== 0){ // nodeTest.nod= (Node)nodeTest.head; // if(input== nodeTest.nod.value){ // System.out.println(nodeTest.nod.value); // } // } // else{ // nodeTest.nod= (Node)nodeTest.nod.next; // if(input== nodeTest.nod.value){ // System.out.println(nodeTest.nod.value); // } // } // } //反向遍歷方法一,棧 // System.out.println("反向遍歷:"); // //nodeTest.printStack(stk); // Enumeration<Node>items = stk.elements();//得到棧中列舉 // while(items.hasMoreElements()){ // Nodenode = (Node)items.nextElement(); // if(node.value== input){ // System.out.println(node.value+ ";;"); // } // } search(nodeTest.head); } //反向遍歷方法二,遞迴 publicstatic void search(Node nodeTest){ if(nodeTest.next!=null) { search(nodeTest.next); System.out.println(nodeTest.value); }else{ return; } } //新增節點Stack<Node>stk publicvoid AddNode(int i){ newNode= new Node(); if(head== null){ head= newNode; }else{ if(CountNum== 1){ point= head; } point.next= newNode; } point= newNode; point.value= i; point.next= null; CountNum++; //stk.push(point); } publicvoid printStack(Stack<Node> stack){ if(stack.empty()){ System.out.println("棧是空的"); }else{ System.out.println("棧中的元素:"); Enumeration<Node>items = stack.elements();//得到棧中列舉 while(items.hasMoreElements()){ Nodenode = (Node)items.nextElement(); System.out.println(node.value+ ";;"); } } } }
不足之處望指正。