java数据结构之链表

77 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

前言

这里篇文章,我准备讨论最简单和最基本的数据结构链表以及简单的提一下两个重要的类ArrayList和LinkList的一些理解。

链表

众所周知,表也可以用数组去定义的,不过那叫顺序表。对于顺序表来说,他的查找速度非常快,但是他的插入是非常麻烦的,有时候还需要扩容,扩容对于顺序变量开销是非常大的。那有没有一种插入是非常快的。当然是有的,这就要说到我们今天的主角链表了。

链表的创建

对于一个链表的创建的话,首先你需要定义一个节点类,node类就像下面这个一样,在节点类上定义一个下一个节点类的属性,其他的就不需要太注意了。

public class StuNode
{
    public String name;
    public int card;
    public double grade;
    public StuNode next;//这个是关键

    public StuNode() {
    }

    public StuNode(String name, int card, double grade) {
        this.name = name;
        this.card = card;
        this.grade = grade;
    }
   
}

接下来就是撰写链表类,这里就拿最简单的单链表举例,在这个链表类中需要一个头结点的结点类,你可以让这个头结点直接指向第一个插入进来的节点,或者头结点的next属性指向插入进来的第一个节点,本文采用后一种做法。

public class SingleLinkList
{
    StuNode head ;
    public SingleLinkList() {
        this.head =  new StuNode(" ",0,Integer.MAX_VALUE);
    }

    //添加节点并顺便排序
    public void add(StuNode node)
    {
       

    }

   
    public void delete(int card)
    {
        StuNode temp = head;

        boolean flag = false;//判断有没有找到
        while (true)
        {
            //当结点在末尾的时候
            if(temp.next==null)
            {
                break;
            }
            if (temp.next.card==card)
            {
                flag =true;
                break;
            }

            //迭代条件
            temp=temp.next;
        }

        if (flag)//找到了该学号的学生
        {
           temp.next = temp.next.next;
            System.out.println("删除成功");
        }else
        {
            System.out.println("没找到这名学生");
        }
    }

 

}

这里只显示了一些对应的方法,下面我将解释这些方法

add

对于这个方法来说,如果不加排序就是直接遍历到next属性(即链表的结尾)即可,如果是按顺序就实现comparable接口,实现对应的方法,在加的时候判断下就好。

删除

先遍历找到要删除的节点,然后开始让父节点的next指向要删除节点的next即可。