zoukankan      html  css  js  c++  java
  • java自定义链表数据结构

     链表是一种数据结构:由数据和指针构成,链表的指针指向下一个节点。

    listnode是自定义的一种链表结构,下面为链表的添加、遍历和替换的代码实现。初学有点难理解,多看几遍就会了。

    class ListNode {        //类名 :Java类就是一种自定义的数据结构
        int val;            //数据 :节点数据 
        ListNode next;      //对象 :引用下一个节点对象。在Java中没有指针的概念,Java中的引用和C语言的指针类似
        
        ListNode(int val){  //构造方法 :构造方法和类名相同   
            this.val=val;   //把接收的参数赋值给当前类的val变量
        }
    }
    
    class Test{
        public static void main(String[] args){
            
            ListNode nodeSta = new ListNode(0);          //创建首节点
            ListNode nextNode;                           //声明一个变量用来在移动过程中指向当前节点
            nextNode=nodeSta;                            //指向首节点
            
            //创建链表
            for(int i=1;i<10;i++){
                ListNode node = new ListNode(i);         //生成新的节点
                nextNode.next=node;                      //把心节点连起来
                nextNode=nextNode.next;                  //当前节点往后移动
            } //当for循环完成之后 nextNode指向最后一个节点,
            
            nextNode=nodeSta;                            //重新赋值让它指向首节点
            print(nextNode);                             //打印输出
         
            //替换节点
            while(nextNode!=null){
                if(nextNode.val==4){
                    ListNode newnode = new ListNode(99);  //生成新的节点
                    ListNode node=nextNode.next.next;     //先保存要替换节点的下一个节点
                    nextNode.next.next=null;              //被替换节点 指向为空 ,等待java垃圾回收
                    nextNode.next=newnode;                //插入新节点
                    newnode.next=node;                    //新节点的下一个节点指向 之前保存的节点
                }
                nextNode=nextNode.next;
            }//循环完成之后 nextNode指向最后一个节点
             nextNode=nodeSta;                            //重新赋值让它指向首节点
             print(nextNode);                             //打印输出
          
        }
        
        //打印输出方法
        static void print(ListNode listNoed){
            //创建链表节点
            while(listNoed!=null){
                System.out.println("节点:"+listNoed.val);
                listNoed=listNoed.next;
            }
            System.out.println();
        }
    }

    需要理解jvm内存模型,在这里nextNode只是一个变量!!!类型为ListNode。

    ListNode nextNode;//声明一个变量nextNode,为null值。相当于ListNode nextNode = null;
    ListNode nodeSta = new ListNode(0); 
    可以分解为:
      ListNode nodeSta;//声明一个变量nodeSta
      nodeSta = new ListNode(0);//堆中创建对象(分配一段内存空间),并且把变量nodeSta指向了堆中的对象
    变量都是在栈中的;


     链表是一种数据结构:由数据和指针构成,链表的指针指向下一个节点。
    所以链表结构是一个对象,在堆内存中有一块空间存储。链表的变量next指向着下一块
    堆内存的空间存储位置。

  • 相关阅读:
    安装future包,django-crispy-forms
    django学习笔记(七)-----视图
    django学习笔记(六)-----模型
    django学习笔记(五)------path
    django学习笔记(四)---基本流程三(视图,模板基本使用)
    django学习笔记(三)--基本流程二---admin站点管理
    django学习笔记(二)基本流程一
    C#时间
    可空类型的DateTime转换成字符串
    asp.net mvc Razor一点小注意点
  • 原文地址:https://www.cnblogs.com/chenfx/p/14288066.html
Copyright © 2011-2022 走看看