Java数据结构-LinkList链表解读(1)

版权声明: https://blog.csdn.net/pbrlovejava/article/details/82975746


前面的文章中介绍了数组这种应用最广泛的数据结构,数组的使用很简单,但是数组存在着诸多不足,例如在无序数组中的查询时间复杂度为O(n),在有序数组数组中,插入的时间复杂度为O(n);本篇将介绍另一种应用广泛的数据结构-链表(LinkList),它在某些数据结构的实现中可以取代数组。

一、什么是链表

链表(LinkList)是一种数据结构。在链表中,每个数据项被包含在链结点Link中,每个Link结点实际上就是一个结点对象,它包含了对前一个结点的引用(preLink)和后一个结点(postLink)的引用,通过这个引用关系,将一个个结点Link串联成链表ListList
示意图

二、用Java构造一个链表

1、链表结点Link的构造:

//链表结点
    static class Link{
        public int data;//结点中存储的数据
        public Link next;//下一个结点
        //含参构造方法
        public Link(int  data){
            this.data = data;
        }

        //遍历链表
        public void displayLink(){
            System.out.print(this.data+"->");
        }
    }

2、链表LinkList的构造:

public class LinkList {
    //第一个链结点
    private Link first;
    //含参构造,将first赋为null
    public LinkList(){
        this.first = null;
    }


    //判断链表是否为空
    public boolean isEmpty(){
        return (this.first == null);
    }

    //插入链头结点
    public void insertFirst(int data){
        Link linkFirst = new Link(data);
        linkFirst.next = this.first;//linkHead -> old first
        this.first = linkFirst;//new first -> linkHead
    }
    }

insertHead方法

3、deleteFirst方法

//删除链头
    public void deleteFirst(){
        this.first = this.first.next;
    }

4、遍历链结点

 //遍历链表
    public void displayLinkList(){
        Link current = this.first;//从链头开始遍历
        while (current != null){
            //当前链结点不为空即输出内容
            current.displayLink();
            //将当前链结点指向下一个链结点
            current = current.next;
        }
    }

5、完整程序:

package com.example.demo;

/**
 * @Description:LinkList Demo
 * @CreateDate: Created in 2018/10/8 23:05
 * @Author: <a href="https://blog.csdn.net/pbrlovejava">arong</a>
 */
public class LinkList {
    //第一个链结点
    private Link first;
    //含参构造,将first赋为null
    public LinkList(){
        this.first = null;
    }


    //判断链表是否为空
    public boolean isEmpty(){
        return (this.first == null);
    }

    //插入链头结点
    public void insertFirst(int data){
        Link linkFirst = new Link(data);
        linkFirst.next = this.first;//linkHead -> old first
        this.first = linkFirst;//new first -> linkHead
    }

    //遍历链表
    public void displayLinkList(){
        Link current = this.first;//从链头开始遍历
        while (current != null){
            //当前链结点不为空即输出内容
            current.displayLink();
            //将当前链结点指向下一个链结点
            current = current.next;
        }
    }

    //删除链头
    public void deleteFirst(){
        this.first = this.first.next;
    }

    //链表结点
    static class Link{
        public int data;//结点中存储的数据
        public Link next;//下一个结点
        //含参构造方法
        public Link(int  data){
            this.data = data;
        }

        //输出链结点
        public void displayLink(){
            System.out.print(this.data+"->");
        }
    }

}

6、测试链表:

@Test
    public void fun1(){
        LinkList linkList = new LinkList();
        linkList.insertFirst(1);
        linkList.insertFirst(2);
        linkList.insertFirst(3);
        linkList.insertFirst(4);
        linkList.insertFirst(5);
        System.out.println("遍历1");
        linkList.displayLinkList();
        System.out.println("删除两个链头");
        linkList.deleteFirst();
        linkList.deleteFirst();
        System.out.println("遍历2");
        linkList.displayLinkList();

    }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/pbrlovejava/article/details/82975746
今日推荐