什么是链表
模拟链表:
Node(节点):
package com.javaSe.List; /* 单链表中的节点。 节点是单向链表中的基本单元。 每一个节点Node都有两个属性: 一个属性:是存储的数据 另一个属性:是下一个节点的内存地址 */ public class Node { // 存储的数据 Object date; // 下一个节点的内存地址 Node next; public Node(){ } public Node(Object date,Node next){ this.date = date; this.next = next; } }
链表:
package com.javaSe.List; public class Link<E> { public static void main(String[] args) { Link<String> link = new Link<>(); // 只能传String类型。 link.add("abc"); // 类型不匹配 // link.add(123); } // 头节点 Node header = null; int size = 0; public int size(){ return size; } // 向链表中添加元素的方法(向末尾添加) // public void add(Object date){ public void add(E date){ // 创建一个新的节点对象 // 让之前单链表的末尾节点next指向新节点对象。 // 有可能这个元素是第一个,也可能是第二个,也可能是第三个 if (header == null){ // 说明还没有节点 // new 一个新的节点作为头节点 // 这个时候的头节点既是一个头节点,又是一个尾结点 header = new Node(date,null); } else { // 说明头不是空 // 头节点已经有了 // 找出当前末尾节点,让当前末尾节点的next是新节点。 Node currentLastNode = findLast(header); currentLastNode.next = new Node(date,null); } size++; } /** * 专门查找末尾节点的方法 * @return */ private Node findLast(Node node) { if(node.next == null){ // 如果一个节点的next是null // 说明这个节点就是末尾节点 return node; } // 程序能够到这里说明:node不是末尾节点。 return findLast(node.next); // 递归算法 } // 删除链表中某个数据的方法 public void remove(Object obj){ } // 修改链表中某个数据的方法 public void modify(Object obj){ } // 查找链表中某个元素的方法 public int find(Object obj){ return 1; } }
测试类:
package com.javaSe.List; public class NodeTest { public static void main(String[] args) { // 创建了一个集合 Link link = new Link(); // 往集合中添加元素 link.add(100); link.add(200); link.add(300); // 获取元素的个数 System.out.println(link.size()); } }