链表的创建

本文介绍如何使用Java实现单向链表和二叉树的基本操作,包括链表的头插法创建及遍历,以及二叉树的创建与先序遍历。此外还涉及双向链表的创建及遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

① 数据结构,使用头插法创建一个链表

import java.util.Random;
//创建链表类
class MLink{
    //当Mlink实例化后形成一个链表的节点对象
    //节点对象中的属性
    //节点存储的属性
    private int data;
    //存储下一个链表节点地址的属性
    private MLink next;

    /**
     *   功能:创建一个链表,并返回头节点的地址
     * @param len 创建链表数据的长度
     * @return  返回头节点的地址
     */
    public MLink create(int len){
        MLink header=null;
        //创建随机对象
        Random ra=new Random();
        //生成指定长度的随机数
        for (int i = 0; i <len ; i++) {
            //创建随机数
            int num=ra.nextInt(100);
            //创建一个节点对象
            MLink temp=new MLink();
            //存储数据
            temp.data=num;
            //是否第一次创建链表节点
            if(header==null)
               header=temp;
            else{
                temp.next=header;
                header=temp;
            }
        }
        return header;
    }
    /**
     * 遍历整个链表
     * @param header 链表中第一个节点的地址
     */
    public void show(MLink header){
        while(header!=null){
            System.out.println(header.data);
            //遍历下一个节点
            header=header.next;
        }
    }
}
public class Demo01 {
    public static void main(String[] args) {
          //创建链表对象
        MLink link=new MLink();
        //创建一个链表,并返回第一个节点的地址
        MLink header=link.create(8);
        //遍历创建的链表
        link.show(header);
    }
}


② 创建一个二叉树并遍历

 

 

import java.util.Scanner;
//定义一个二叉树
//实例化后,形成二叉树的节点
class Tree{
  //定义节点的属性
    private char data;//存储数据
    //存储左右子树地址的属性
    private Tree left,right;
    //控制数组索引
    private int top;//默认为0
    /**
     *  创建一颗二叉树,并返回根节点地址
     * @param des
     * @return
     */
    public Tree create(String des){

        Scanner sc=new Scanner(System.in);
        System.out.println("des:"+des);
              String str=sc.next();
        if(str.charAt(0)<'A')return null;

        //实例化一个tree的节点
        Tree root=new Tree();
         //为当前的节点赋值
         root.data=str.charAt(0);
        //在当前树根的基础上通过递归创建左右子 树
         root.left=create(str.charAt(0)+" 左子树:");
         root.right=create(str.charAt(0)+" 右子树:");
        //返回创建的二叉树的树根
        return root;
    }
    //二叉树的遍历,先序遍历、中序遍历和后序遍历
    public void show(Tree tree){
        //先序遍历
        if(tree!=null){
            System.out.println(tree.data);
            //遍历左子树
            show(tree.left);
            show(tree.right);
        }
    }
}
public class Demo02 {
    public static void main(String[] args) {
          Tree tree=new Tree();
        Tree root=tree.create("根");
          //调用遍历
        tree.show(root);
    }
}

3 输入10个随机数创建一个双向链表,创建一个方法接收int类型的整数,查询该位置的元素值,并删除该节点,
 制作一个遍历二叉树的方法;

package link;
import java.util.Scanner;
//创建双向链表类
class DLink{
     String data;
    DLink prev,next;//prev存储前一个节点地址;next存储后一个节点的地址

    /**
     * 创建一个双向链表,返回头地址
     * @param len 传输向节点传输数据长度
     * @return 返回头地址
     */
    public DLink create(int len){
        //header存储头节点地址,tailer存储尾部节点地址,temp存储临时节点地址
        DLink header,tailer,temp;
        header=tailer=null;//初始化
        Scanner sc=new Scanner(System.in);
        //根据用户传递len的长度
        for (int i = 0; i <len ; i++) {
            //创建节点
            temp=new DLink();
            //获取用户传送的数据
            System.out.println("请输入数据:");
            String in=sc.next();
            //为节点数据赋值
            temp.data=in;
            //判断当前节点是否为第一次创建
            if(header==null){
                header=tailer=temp;
            }else{
                //新节点与双向链表产生关联
                //通过temp新节点的prev属性获取原链表最后一个节点的地址
                temp.prev=tailer;
                //将原链表的最后一个节点的next 存储新节点temp的地址
                tailer.next=temp;
                //上两步相当于将新节点连入到链表中
//                tailer始终存储最后一个节点的地址
                tailer=temp;
            }
        }
        return header;
    }
}
public class DoubleLinkDemo {
    public static void main(String[] args) {
      DLink link=new DLink();
      DLink header=link.create(6);
      //遍历双向链表
        while(header!=null){
            System.out.println(header.data);
            //获取下一个元素
            header=header.next;
        }
        System.out.println("=======================");
        System.out.println(header.prev.data);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值