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指向着下一块
堆内存的空间存储位置。

 

posted @ 2021-01-17 01:16  炼金术士0z  阅读(604)  评论(0编辑  收藏  举报