【无标题】

头插法: 头插法的实现相对简单 思路是将新形成的节点的下一个赋值为header

               再把新形成的节点地址传给header即将header向前移动。

import java.util.Random;
import java.util.Scanner;
 
public class Link {
    //创建一个存储数据的属性
    int data;
    //创建存储下一个节点地址的属性
    Link next;
    static int length=0;
    /**
     * 创建一个链表
     * @param len  产生数据的长度
     * @return  链表第一个节点地址
     */
    public static Link creat(int len){
        //定义随机对象
        Random r=new Random();
        //定义链表的节点
        Link newnode,header;
        //header永远存储第一个节点的地址,tailer永远存储最后一个节点的地址
        header=null;
        for (int i = 0; i < len; i++) {
            //生成一个随机数字
            int temp=r.nextInt(100);
            //创建一个临时节点
            newnode=new Link();
            //长度
            length++;
            //为属性赋值
            newnode.data=temp;
            //判断当前链表是否第一次赋值
            if(header==null){
                header=newnode;
            }else{
                //将新节点连接到链表的头部
                newnode.next=header;
                //header永远存储第一个节点的地址
                header=newnode;
            }
        }
        return header;
    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("输入长度:");
        int l=sc.nextInt();
        System.out.println("打印数组:");
        //调用数组生成方法 传入键盘值l
        Link head=Link.creat(l);
        for (int i = 0; i < Link.length; i++) {
            System.out.print(head.data+" ");
            //把当前对象的下一个对象地址传给当前对象
            head=head.next;
        }
    }
}

尾插法:

工作原理:创建一个类MyLinked设置一个存储链表数据的属性int data,在设置存储链表内下一个数据节点的属性MyLinked next.

定义一个创建链表的方法,定义head永远保存第一个节点地址,storage永远保存最后一个地址,last保存每次循环产生的临时节点地址,创建数据给data,创建新地址给storage。next做拼接storage接受当前地址作为最后一个地址存储。
 

import java.util.Random;

public class MyLinked {
    int data;    //创建一个数组的属性
    MyLinked next; //创建一个储存下一个节点的属性
    public MyLinked ceate(int len) {
        Random r = new  Random();//随机对象
        MyLinked head,storage,last;  //定义三个对象,head 为 永远存储第一个节点的地址
        //storage 为 永远存储最后一个节点的地址
        //last 为  新的临时节点
        head = storage = last = null;
        for (int i = 0; i <len ; i++) {
            int temp = r.nextInt(50);
            last = new MyLinked();//创建一个新的临时节点
            last.data = temp;  //为属性赋值
            if (head ==null){  //判断链表是否是第一次赋值
                head = storage = last;
            }else {
                storage.next = last;//将新节点连接到链表的尾部
                storage = last;  //永远的储存最后一个节点的地址
            }
        }
        return head;
    }
    public static void main(String[] args) {
        MyLinked my = new MyLinked();//引用
        MyLinked ww =  my.ceate(10);//将随机的数值赋值给ww
        for (int i = 0; i <10 ; i++) {
            System.out.print(ww.data+"  ");//打印第一个数的值;
            ww = ww.next;//将下一个数my.next值赋给xx后,下一轮xx.data就相当于这个数的值;
        }
    }
}

上一篇:HTML5中各种标签总结(列表标签、表格标签)


下一篇:工作中使用的git提交规范