Java构造用户链表,java链表构造

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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值