数据结构(单链表)
1.简介: 你可以把链表看成是一条链子,一环扣一环,必须通过上一个节点找到下一个节点next
2.单向链表的每一个节点都包含一个数据和一个指向下一个节点的地址值(头结点和未节点除外,头结点没有数据只有一个地址值,尾节点的next地址值是空的,最后面因为没有数据了),链表图片
3,应用场景
高速缓存的应用,用链表存储数据极快! 因为你们知道链表的插入和删除是很快的,但是查询很慢! 极端情况下要遍历整个链表才能找到!
4.自己用java代码实现一个单链表
1. 自己写一个链表节点类!
package com.aop.aspect.datastructure;
public class Node {
//头节点
Node head;
//节点数据
Object data;
//下一个节点
Node next;
public Node(Object data) {
this.data = data;
}
public void setHead(Node head) {
this.head = head;
}
public Node getHead() {
return head;
}
//改进 下一个节点,用第一个节点append依次向下追加! 无限追加!
public Node append(Node node){
this.next = node;
Node newNode = this.next;
if (this.head == null){
System.out.println(this.getData());
newNode.setHead(this);
}
System.out.println(this.next.getData());
if (this.getHead()!=null){
newNode.setHead(this.head);
}
return newNode;
}
//获取下一个节点
public Node next(){
return this.next;
}
//获取节点中的数据
public Object getData(){
return this.data;
}
//当前节点是否为最后一个节点
public boolean isLast(){
return next == null;
}
//遍历节点,打印链表所有数据!
public void printAll(Node head){
if (head == this){
System.out.print(head.getData() + " ");
}
while (head !=null && (head=head.next)!=null){
System.out.print(head.getData()+" ");
}
}
}
2.测试自己实现的链表!
package com.aop.aspect.datastructure;
public class TestNode {
public static void main(String[] args) {
//创节点!
Node node1 = new Node(1);
//node1是头节点,遍历的时候必须要拿到头结点才能向下遍历,这里打印下
System.out.println("我是头结点地址值 " + node1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node thisNode = node1.append(node2).append(node3).append(new Node(4));
//获取头节点,并打印节点数据
Node head = thisNode.getHead();
System.out.println("我是头结点地址值: " + head);
//打印添加的所有链表数据!
node1.printAll(thisNode);
}
}