三木零 发表于 2022-3-23 11:10

【笔记】java--代码实现链表

本帖最后由 三木零 于 2022-3-23 11:12 编辑

只做了部分功能,原理都是差不多的
链表结构大概就是:一个根节点,后边许多的普通节点
根节点只有一个引用没有数据,存放数据的时候会先创建一个节点,然后创建的节点存放了数据
当有下一个数据存放进来的时候,根节点指向的那个节点会创建下一个节点存放着
链表是利用了递归的思想,即自己调用自己
// 作为链表对象
class LinkList {
    // 根节点
    private Node root;

    // 添加数据
    public void add(int data) {
      // 判断是否有节点,没有的话创建一个,有的话直接添加数据
      if (this.root == null) {
            this.root = new Node();
            this.root.data = data;
      } else {
            this.root.add(data);
      }
    }

    // 查看所有数据
    public void select() {
      if (this.root == null) {
            System.out.println("null");
      } else {
            System.out.print("[");
            this.root.select();
      }
    }

    // 删除一个节点的数据,使用值作为参数来删除
    // 因为链表的特性,可以直接把下一个节点赋值到当前节点来实现删除功能
    public void delete(int data) {
      // 需要判断一下下一个节点还有没有数据
      if (root == null) {
            System.out.println("没有这个数据");
            return;
      }
      if (data == root.data) {
            System.out.println("成功删除数据:" + data);
            this.root = root.next;
      } else {
            this.root.delete(data);
      }
    }

    // 节点类
    class Node {
      // 数据
      private int data;
      // 下一个节点
      private Node next;

      public Node() {
      }

      // 添加数据的方法
      public void add(int data) {
            // 如果next变量有节点则使用下一个节点的添加数据的方法
            if (this.next == null) {
                this.next = new Node();
                this.next.data = data;
            } else {
                this.next.add(data);
            }
      }

      // 查看数据
      public void select() {
            System.out.print(this.data);
            if (this.next != null) {
                System.out.print(",");
                this.next.select();
            } else {
                System.out.print("]");
            }
      }

      // 删除节点
      public void delete(int data) {
            // 需要判断一下下一个节点还有没有数据
            if (this.next == null) {
                System.out.println("没有这个数据");
                return;
            }
            if (this.next.data == data) {
                System.out.println("成功删除数据:" + data);
                this.next = this.next.next;
            } else {
                this.next.delete(data);
            }
      }
    }
}
=================Main方法中测试代码====================
public class Main {
    public static void main(String[] args) {
      System.out.println("链表算法实现");
      LinkList linkList = new LinkList();
      linkList.add(12);
      linkList.add(23);
      linkList.add(34);
      linkList.add(56);
      linkList.add(78);
      linkList.delete(78);
      linkList.select();
    }
}
=================测试结果====================

MrMyn 发表于 2022-3-23 11:20

可以,试一下

CONNECT01 发表于 2022-3-23 11:22

思路很不错,很久没写过这种了。

三木零 发表于 2022-3-23 11:30

CONNECT01 发表于 2022-3-23 11:22
思路很不错,很久没写过这种了。

写的有些简略了,还有很多功能没写

三木零 发表于 2022-3-23 11:31

MrMyn 发表于 2022-3-23 11:20
可以,试一下

加油加油{:1_927:}
页: [1]
查看完整版本: 【笔记】java--代码实现链表