Java学习之单链表创建以及正向遍历和反向遍历方法

原创 2016年08月30日 21:42:55

链表是一种存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。原先是在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+ ";;");
                           
                     }
              }
       }
}
 


不足之处望指正。



版权声明:本文为博主原创文章,未经博主允许不得转载。

java实现单链表,功能有插入,删除,遍历。

public class Code {private int data;private Code next;public int getData() { return data;}public voi...

Android RIL 架构学习总结

Android RIL 架构学习总结作者: Venus| 时间: 2011-03-08| 分类: Android| 分享次数: 736 次| 快来吐槽摘要: Android RIL 是基于teleph...

【Midtest】工程模式下测试界面的修改

需要将以一行三个button显示的工程模式下的测试选项改为列表形式。 首先可以使用ListView对相应的选项进行显示。 ListView所需要的:1.数据源 2.显示形式1.首先在xml文件中定...
  • okm6666
  • okm6666
  • 2016年04月14日 09:48
  • 853

单链表的创建、遍历及删除

  • 2011年10月31日 13:48
  • 6KB
  • 下载

单链表的插入删除 遍历等操作

  • 2011年12月05日 13:33
  • 2KB
  • 下载

单链表很类似于栈,先插入的后遍历,删除也是删除最后插进来的。但增加的指定查找和指定删除的方法增加了灵活性,可以删除、查找指定key

package none005链表; // 单链表很类似于栈,先插入的后遍历,删除也是删除最后插进来的。 //但增加的指定查找和指定删除的方法增加了灵活性,可以删除、查找指定key public cl...

【Java】利用单链表遍历、队列通过广度优先搜索算法来求各个的连通分量

这里就不再用书上的大堆废话的来说,广度优先搜索算法就是遍历一个图所有点的算法,也就说要对图中的每一个点进行访问,访问之后你才能对点进行操作。由于你对一个图进行操作,那么你必须对图上的每个点进行操作,所...

单链表----定义、增加节点、删除节点、遍历输出(java)

单链表的结构比较简单,图示如下: 单链表有很多个节点构成。每个节点由指针域和数值域构成,指针指向下一个节点的数值域。最后一个节点的指针指向的是NULL。java实现单链表的一些基本的操作:packa...

C语言实现单链表创建和遍历

创建单链表有多种方式,我这里介绍从尾部添加新节点的创建方式。 创建的过程: 1.定义节点的数据结构 c语言中链表节点是用结构体来实现,创建之前要明白数据域需要什么类型的数据。例如: //定义链表中...

单链表的各种操作——创建及遍历

链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java学习之单链表创建以及正向遍历和反向遍历方法
举报原因:
原因补充:

(最多只允许输入30个字)