单向链表数据结构
-
对于链表数据结构来说:基本的单元是节点Node。
-
对于单向链表来说,任何一个节点Node中都有两个属性:
第一:存储的数据 第二:下一节点的内存地址
-
链表优点:随机增删元素效率较高。(因为增删元素不涉及到大量元素位移)
-
链表缺点:查询效率较低,每一次查找某个元素的时候都需要从头节点开始往下遍历
-
自己写一个链表
package com.lichennan.collection.danlink;
/*
单链表中的节点。
节点是单向链表中的基本单元。
每一个节点node都有两个属性:
一个属性:是存储的数据
另一个属性:是下一个节点的内存地址。
*/
public class Node {
//存储的数据
Object element;
//下一个节点的内存地址
Node next;
public Node(){
}
public Node(Object element, Node next){
this.element = element;
this.next = next;
}
}
package com.lichennan.collection.danlink;
//链表类
public class Link {
//头节点
Node header = null;
int size = 0;
public int size(){
return size;
}
//向链表中添加元素的方法
public void add(Object date){
//创建一个新的节点对象
//让之前单链表的末尾节点next指向新节点对象。
if(header == null){
header = new Node(date,null);
}else {
Node currentLastNode = findLast(header);
currentLastNode.next = new Node(date,null);
}
size++;
}
private Node findLast(Node node) {
if(node.next==null){
//如果一个节点的next是null
//说明这个节点就是末尾节点。
return node;
}
//程序能够到这,说明这个节点不是末尾节点
return findLast(node.next);
}
//删除链表中某个数据的方法
public void remove(Object obj){
}
//修改链表中某个数据的方法
public void modify(Object newObj){
}
//查找链表中某个元素的方法
public int find(Object obj){
return 1;
}
}
package com.lichennan.collection.danlink;
public class Test {
public static void main(String[] args) {
//创建一个集合对象
Link link = new Link();
link.add(100);
link.add(200);
link.add(300);
link.add(400);
System.out.println(link.size);
}
}