单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。就好像一列火车,每一节车厢后面都会跟着另一节车厢。
public class Node {
//节点内容
int data;
//下一个节点
Node next;
//构造方法
public Node(int data){
this.data = data;
}
//为当前节点追加下一个节点
public Node append(Node node){
//创建的节点为当前节点
Node thisNode = this;
while (true){
//创建第二个节点为当前节点的下一个节点
Node nextnode = thisNode.next;
//如果第下一个节点为空,那么thisNode即为最后一个节点,无需追加节点,跳出循环
if (nextnode == null){
break;
}
//如果下一个节点不为空,则下一个节点变成当前节点,继续循环,直到找到最后节点
thisNode = nextnode;
}
//把需要追加的节点追加到当前节点也就是循环结束后的最后一个节点之后
thisNode.next = node;
//然后将自己返回出去,方便调用代码的使用
return this;
}
//获取下一个节点
public Node next(){
return this.next;
}
//获取节点的值
public int getData(){
return this.data;
}
}
这里是测试代码,结果显而易见是3
//新建三个节点
Node n1= new Node(1);
Node n2 = new Node(2);
Node n3 = new Node(3);
//从n1节点往下追加节点
n1.append(n2).append(n3);
//打印节点内容
System.out.println(n1.next().next().getData());
删除节点的代码相对就会简单,原理就是把当前节点A的下个节点B换成下下个节点C,那么节点B自然就被替换掉。
//删除当前节点
public void remove(){
//获取当前节点的下下个节点
Node newNext = next.next;
//然后把下下个节点作为下个节点
this.next = newNext;
}
插入节点的代码也与之类似,原理是将当前节点A的下个节点B先取出,将要插入的节点B+作为A节点的下一个节点,然后再将取出的B节点作为插入节点B+的下一个节点
//插入一个节点
public void insert(Node node){
//取出当前节点的下一个节点作为插入节点的下个节点
Node nextnext = this.next;
//将要插入的节点作为当前节点的下个节点
this.next = node;
//将取出的下个节点作为插入节点的下个节点
node.next = nextnext;
}