1. 程式人生 > >Java學習之單鏈表建立以及正向遍歷和反向遍歷方法

Java學習之單鏈表建立以及正向遍歷和反向遍歷方法

連結串列是一種儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。原先是在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+ ";;");
                           
                     }
              }
       }
}
 


不足之處望指正。