数据增加:public void add(Object data)
如果要想在链表之中实现一个数据的增加操作,则应该首先在链表里面提供有一个追加方法,而这个追加方法的参数应该是Object类型.
1.在Link类中追加新的方法定义。
class Link{//负责链表的操作
//将Node定义为内部类,表示Node类只为Link类服务
private class Node{//负责数据与节点关系的匹配
private Object data;//保存节点的数据
private Node next;//保存下一个节点
public Node(Object data) {
this.data=data;
}
}
//-----------------以下为Link类定义-------------
public void add(Object data) {
if(data==null) {//认为追加规定不允许存放空值
return ;//方法结束
}
}
}
2.那么该如何进行数据的保存呢?应该首先定义个根节点,才可以陆续添加后面的子节点。这个节点的类型一定就是Node,则应该在Link类里面追加有一个Node类的属性。
private Node root;//属于根节点,没有根节点就无法进行数据的保存
3.后续节点操作:
class Link{//负责链表的操作
//将Node定义为内部类,表示Node类只为Link类服务
private class Node{//负责数据与节点关系的匹配
private Object data;//保存节点的数据
private Node next;//保存下一个节点
public Node(Object data) {
this.data=data;
}
//第一次调用:this=Link.root
//第二次调用:this=Link.root.next
//第三次调用:this=Link.root.next.next
public void addNode(Node newNode) {//处理节点关系
if(this.next==null) {//当前节点下一个为空,表示可以保存
this.next=newNode;
}else {//当前节点的下一个不为空
this.next.addNode(newNode);
}
}
}
//-----------------以下为Link类定义-------------
private Node root;
//root存第一个数据,属于根节点,没有根节点就无法进行数据的保存
public void add(Object data) {
if(data==null) {//人为追加规定不允许存放空值
return ;//方法结束
}
//如果想要进行数据的保存,那么必须将数据封装在Node节点类里面
//如果没有封装,则无法确认好节点的先后顺序
Node newNode =new Node(data);
if(this.root==null) {//当前并没并没有根节点
this.root=newNode;//第一个节点设置为根节点
}else {//根节点已经存在了
//应该把此时的节点顺序的处理交给Node类自己完成
this.root.addNode(newNode);
}
}
}
public class TestLinkDemo{
public static void main(String[] args) {
Link all=new Link();
all.add("hello");
all.add("world");
all.add("123");
}
}
这个时候理论上如果内存够大,那么可以存放的内容就非常多了,而整个代码的实现关键就在于Node类负责实现数据保存和节点关系匹配
如果觉得上面的解释太过系统化 下面的可以考虑下 更方便理解 注释
class Link{//负责链表的操作 给客户调用的
//Link操作Node类 主要干数据保存和节点配置
//☆Link类负责给用户提供该数据,负责操作Node节点关系
//将Node定义为内部类,表示Node类只为Link类服务
private class Node{//只负责节点的问题
private Object data;//保存数据
private Node next;//保存下一个节点
public Node(Object data) {
this.data=data;
}
//第一次调用:this=Link.root
//第二次调用:this=Link.root.next
//第三次调用:this=Link.root.next.next
public void addNode(Node newNode) {//处理节点关系
if(this.next==null) {//直到找到空的地方才是递归的结束
//当前节点下一个为空,表示可以保存
this.next=newNode;
}else {//当前节点的下一个不为空,就去再看下下个是否为空,就是递归
//让此时的下一个next再调用方法然后传newNode(封装着data的数据)
this.next.addNode(newNode);
}
}
}
//-----------------以下为Link类定义-------------
private Node root;//没有根节点就无法进行数据的保存
//数据增加:
public void add(Object data) {
if(data==null) {//人为追加规定不允许存放空值
return ;//表示方法结束
}
//如果想要进行数据保存,那么碧玺将数据封装在节点类之中
//如果没有封装则无法确认好节点的先后顺序
Node newNode =new Node(data);
if(this.root==null) {//当前并没有根节点
this.root=newNode;//第一个节点设置为根节点
}else {//根节点已经存在了
//所以应该把此时的节点顺序的处理交给Node类自己完成
this.root.addNode(newNode);//第一次执行addNode
}
}
}
public class TestLinkDemo {
public static void main(String[] args) {
}
}