单链表
上面的数组/栈/队列都是顺序存储,链表/循环链表/双链表都是链式存储。
单链表在存储本身数据的同时也要存储它的下一个数据的地址,就比如说火车的一节一节车厢,车厢本身既要承载乘客也要连接下一节车厢,直到最后车厢
单链表的增删改查实现:
package com.company;
/**
* @author Shuoshi.Yan
* @package:com.company
* @className:
* @description:
* @data 2019-11-08 09:28
* @version:V1.0
* @NOTICE:本内容仅限于xxx有限公司内部传阅,禁止外泄以及用于其他的商业项目
* @ Copyright xxx. All rights reserved.
**/
public class MyNode {
int data;
MyNode nextNode;
public MyNode(int data) {
this.data = data;
}
//添加节点,在当前节点的最后的子节点添加
public MyNode append(MyNode myNode){
//获取当前节点
MyNode myNode1 = this;
//循环获取当前节点下的子节点
while(true){
MyNode myNode2 = myNode1.nextNode;
//若没有下个子节点
if(myNode2 == null){
break;
}
//此节点不是最后的节点
myNode1 = myNode2;
}
//把要追加的节点追加到找到的最后一个节点的下一个节点
myNode1.nextNode = myNode;
return this;
}
//获取下一个节点
public MyNode getNext(){
//容错
if(this.nextNode == null){
return new MyNode(999);
}
return this.nextNode;
}
//删除节点,将删除的节点的子节点替换到删除的节点的位置
public void remove(){
this.nextNode = this.getNext().nextNode;
}
//判断最后一个节点是否是最后一个子节点
public boolean isLast(){
return nextNode == null;
}
//获取所有节点的data
public void getAllNodedata(){
MyNode myNode = this;
while(myNode.data != 999){
System.out.print(myNode.data + " ");
myNode = myNode.getNext();
}
}
//插入节点,将下一个节点作为下下个节点,将插入的节点作为下个节点
public void insert(MyNode myNode){
//取出当前节点的下一个节点,作为下下个节点
MyNode treeNode = this.nextNode;
//把新节点作为当前节点的子节点
this.nextNode = myNode;
//将原当前节点的子节点作为下下个节点
myNode.nextNode = treeNode;
}
public static void main(String[] args) {
//头,根节点
MyNode myNode = new MyNode(1);
//追加三个子节点
myNode.append(new MyNode(2)).append(new MyNode(3)).append(new MyNode(4));
//获取第二个子节点,也就是第三层节点
System.out.println("获取第二个子节点,也就是第三层节点:" + myNode.getNext().getNext().data);
//判断第二个子节点是不是最后一个子节点
System.out.println("判断第二个子节点是不是最后一个子节点:" + myNode.getNext().getNext().isLast());
System.out.print("展示所有节点:");
myNode.getAllNodedata();
System.out.println();
System.out.print("删除第二个节点后:");
myNode.remove();
myNode.getAllNodedata();
System.out.println();
System.out.print("插入第三层节点:");
myNode.nextNode.insert(new MyNode(10));
myNode.getAllNodedata();
}
}
输出:
添加节点,在当前节点的最后的子节点添加
删除节点,将删除的节点的子节点替换到删除的节点的位置
插入节点,将下一个节点作为下下个节点,将插入的节点作为下个节点