今天的内容是单链表
单链表之前写过,不过那是之前一套视频的讲法,其中我觉得node节点写的很好,因为他可以很好的提醒了我们,可以用链表来实现对对象的管理,同时也开了先河,这提醒了我们,可以根据需要自定义一个节点,甚至每一个节点,然后链表成为一个大链表的节点,而我新找到的这套视频,仅以一个整数来表示内容,这无疑是更简单明了的
先上node节点的代码,定义了这个节点有两个属性,一个存放date的整数数据,一个是下一个节点(可以理解为下一个节点的地址)
public class Node {
//节点内容
int date;
//下一个节点
Node next;
//构造方法
public Node(int date) {
this.date = date;
}
下面是追加节点(这里是我觉得最有意思的地方了,以前再使用StringBuild的时候用过append,觉得好神奇,现在理解了)
//为节点追加节点
public Node append(Node node) {//参数为需要追加的节点
Node nowNode = this;//当前节点为本节点(当前节点为再下面循环中指向的节点)(本节点为需要追加节点的节点)
while (true) {
Node nextNode = nowNode.next();//下一个节点是当前节点的下一个节点
if (nextNode == null)//如果当前节点的下一个节点空
break;//结束循环
nowNode = nextNode;//因为当前节点的下一个节点不空,所以把当前节点变成下一个节点
}
nowNode.next = node;//找到当前节点的下一个节点为空时,将当前节点的下一个节点赋值参数传来的node
return nowNode;//返回当前节点的优点可以,连续追加
}
}
下面一段代码与node节点的构成无关,是为了更好的理解连续追加
Node n1 = new Node(1);
Node n2 = new Node(2);
Node n3 = new Node(3);
Node n4 = new Node(4);
n1.append(n2).append(n3).append(n4);
还可以加入更多的方法,例如删除节点,插入节点等都是对next的操作,这里不再仔细写了
下面是完整代码
package demo2;
/**
* @program: ForStudyDataStruct
* @description:
* @author: 张成灬玺
* @create: 2020-01-28 20:30
***/
public class Node {
//节点内容
int date;
//下一个节点
Node next;
//构造方法
public Node(int date) {
this.date = date;
}
//为节点追加节点
public Node append(Node node) {//参数为需要追加的节点
Node nowNode = this;//当前节点为本节点(当前节点为再下面循环中指向的节点)(本节点为需要追加节点的节点)
while (true) {
Node nextNode = nowNode.next();//下一个节点是当前节点的下一个节点
if (nextNode == null)//如果当前节点的下一个节点空
break;//结束循环
nowNode = nextNode;//因为当前节点的下一个节点不空,所以把当前节点变成下一个节点
}
nowNode.next = node;//找到当前节点的下一个节点为空时,将当前节点的下一个节点赋值参数传来的node
return nowNode;//返回当前节点的优点可以,连续追加
}
//删除节点
public void removeNode(int date) {
}
//插入节点
//获取下一个节点
public Node next() {
return this.next;
}
//判定是否为最后一个节点
public boolean isLastNode() {
return this.next == null;
}
//获取节点数据
public int getDate() {
return this.date;
}
}
奥,对了今天还学了栈和队列,忘了,我还寻思一晚上就学这么点东西呢
明天一起补充上
希望只在一瞬之间,而黑暗,永恒。
——孤影墨香