java链表结构

链表介绍

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

链表与数组的区别

链表和数组都叫可以叫做线性表,

数组又叫做顺序表,主要区别在于,顺序表是在内存中开辟一段连续的空间来存储数据,而链表是靠指针来连接多块不连续(也可以是连续)的空间,在逻辑上形成一片连续的空间来存储数据。

两种各有各的好处,链表方便删除和插入,顺表表方便排序等。

单线链表

原文链接:JAVA单向链表的操作(增加节点、查找节点、删除节点)

class Link {                                     //链表类
    class Node {                               //保存每一个节点,此处为了方便直接定义成内部类
        private String data;             //节点的内容
        private Node next;               //保存下一个节点

        public Node(String data) {      //通过构造方法设置节点内容
            this.data = data;
        }

        public void add(Node node) {          //增加节点
            if (this.next == null) {  //如果下一个节点为空,则把新节点加入到next的位置上
                this.next = node;
            } else {                   //如果下一个节点不为空,则继续找next
                this.next.add(node);
            }
        }

        public void print() {                    //打印节点
            if (this.next != null) {
                System.out.print(this.data + "-->");
                this.next.print();
            } else {
                System.out.print(this.data + "\n");
            }
        }

        public boolean search(String data) {               //内部搜索节点的方法
            if (this.data.equals(data)) {
                return true;
            }
            if (this.next != null) {
                return this.next.search(data);
            } else {
                return false;
            }
        }

        public void delete(Node previous, String data) {        //内部删除节点的方法
            if (this.data.equals(data)) {
                previous.next = this.next;
            } else {
                if (this.next != null) {
                    this.next.delete(this, data);
                }
            }
        }
    }

    private Node root;                              //定义头节点

    public void addNode(String data) {         //根据内容添加节点
        Node newNode = new Node(data);    //要插入的节点
        if (this.root == null) {                        //没有头节点,则要插入的节点为头节点
            this.root = newNode;
        } else { //如果有头节点,则调用节点类的方法自动增加
            this.root.add(newNode);
        }
    }

    public void print() {                             //展示列表的方法
        if (root != null) {                              //当链表存在节点的时候进行展示
            this.root.print();
        }
    }

    public boolean searchNode(String data) {            //在链表中寻找指定内容的节点
        return root.search(data);                           //调用内部搜索节点的方法
    }

    public void deleteNode(String data) {                 //在链表中删除指定内容的节点
        if (root.data.equals(data)) {                            //如果是头节点
            if (root.next != null) {
                root = root.next;
            } else {
                root = null;
            }
        } else {
            root.next.delete(this.root, data);
        }
    }
}

public class LinkDemo {
    public static void main(String[] args) {
        Link l = new Link();
        l.addNode("A");
        l.addNode("B");
        l.addNode("C");
        l.addNode("D");
        System.out.println("原链表:");
        l.print();
        String searchNode = "B";
        System.out.println("查找节点:" + searchNode);
        String result = l.searchNode(searchNode) ? "找到!" : "没找到!";
        System.out.println("查找结果:" + result);
        System.out.println("删除节点:" + searchNode);
        l.deleteNode(searchNode);
        System.out.println("删除节点后的链表:");
        l.print();
    }
}
时间: 2024-07-29 16:11:36

java链表结构的相关文章

(原创)用Java实现链表结构对象:单向无环链表

转载请注明本文出处:http://www.cnblogs.com/Starshot/p/6918569.html 链表的结构是由一个一个节点组成的,所谓链,就是每个节点的头尾连在一起.而单向链表就是:每个节点包含了当前节点的值和下一个节点引用.双向链表就是每个节点包含了当前节点的值和上下两个节点的引用.相对于数组结构,链表的增删效率会更加高. 这边文章主要讲怎么用Java实现一个简单的链表结构:单向无环链表.以及实现一些数据处理的方法. 首先,新建一个节点类(本次例子中的节点值都是字符串类型):

利用java实现一个简单的链表结构

定义: 所谓链表就是指在某节点存储数据的过程中还要有一个属性用来指向下一个链表节点,这样的数据存储方式叫做链表 链表优缺点: 优点:易于存储和删除 缺点:查询起来较麻烦 下面我们用java来实现如下链表结构: 首先定义节点类: 复制代码package LinkTest;/** 链表节点类 @author admin */public class Node {private int value;//存储数据private Node next;//下一个节点/** 定义构造器 @param vlau

java实现链表结构详细代码

一.数据准备 1. 定义节点 2.   定义链表 1.数据部分 2.节点部分 class DATA //数据节点类型 { String key; String name; int age; } class CLType //定义链表结构 { DATA nodeData =new DATA(); CLType nextNode; } 二.追加节点 首先分配内存,保存新增节点 从头应用head开始追个检查,直到找到最后结点 将表尾结点地址部分设置为新增节点的地址 将新增节点的地址部分置为null C

Java链表实现

import java.util.Scanner; class DATA2 {     String key;                 //结点的关键字     String name;     int age; } class CLType                                //定义链表结构 {     DATA2 nodeData=new DATA2();     CLType nextNode;             //追加结点     CLType

Java 链表

链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域. 相比于线性表顺序结构,操作复杂.由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn

Java链表基本操作和Java.util.ArrayList

Java链表基本操作和Java.util.ArrayList 今天做了一道<剑指offer>上的一道编程题"从尾到头打印链表",具体要求如下:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 一开始我想的是通过两次遍历链表,第一次遍历得到链表元素的个数count.然后定义一个ArrayList 变量,由于ArrayList是动态数组,不能在未初始化的情况下对任意位置进行插入指定的值.所以只能先对其进行初始化,将count个ArrayList元素赋值为初始值0

Java内存结构和数据类型

Java内存结构 内存就是暂时对数据的一个存储,他的存储速度非常的快,但是他是暂时的存储,从开机时开始存储,掉电或关机之后数据全部丢失.内存的生命周期就是开机和关机,开机的时候开始计算,关机什么都没有了.优点存储速度快,缺点容易坏掉,如果开机的时候,一点反映都没有,屏幕不亮键盘鼠标不亮,这种情况下一般都是内存条有问题.机器蓝屏,指令错误都是内存引起的. 程序的数据都是存储在内存里面,不存储在硬盘上因为硬盘不安全,可以读取数据.但是内存就不一样,内存他不允许去读取内存数据,并且速度很快所以我们的程

解析java树形结构

思路一: 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHAR2(50), PID NUMBER //父节点 ) b.表数据: insert into tb_tree (CID, CNAME, PID) values (1, '中国', 0); insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1); insert into tb_

【Java虚拟机结构(第1部分)数据类型】摘要

<Java虚拟机规范(Java SE 7版)>作者:Tim Lindholm.Frank Yellin.Gilad Bracha.Alex Buckley 摘要:第二章 Java虚拟机结构(第1部分) 本规范描述的是一种抽象化的虚拟机的行为,而不是任何一种被广泛使用的虚拟机实现. 2.1 Class 文件格式 编译后被Java虚拟机所执行的代码使用了一种平台中立(不依赖于特定硬件及操作系统的)的二进制格式来表示,并且经常(但并非绝对)以文件的形式存储,因此这种格式被称为Class文件格式. 2