链表
class Node2{ //定义一个节点
private String data;
private Node2 next; //要保存的下一个节点
public Node2(String data){ //每一个Node2对象都必须保存相应的数据
this.data=data;
}
public void setNext(Node2 next){
this.next=next;
}
public Node2 getNext(){
return this.next;
}
public String getData(){
return this.data;
}
public void addNode2(Node2 newNode2){
if(this.next==null){ //当前节点的下一个为null
this.next=newNode2; //保存新节点
}
else{ //当前节点之后还存在节点
this.next.addNode2(newNode2); //当前节点的下一个节点继续保存
}
}
public void printNode2(){
System.out.println(this.data); //输出当前节点数据
if(this.next!=null){
this.next.printNode2(); //找到下一个节点继续输出(递归调用)
}
}
}
class Link{ //数据的设置和输出
private Node2 root; //根节点
public void add(String data){
Node2 newNode2=new Node2(data); //设置数据的先后关系
if(this.root==null){ //一个链表只有一个根节点的情况
this.root=newNode2; //将新的节点设置为根节点
}
else{ //根节点已存在
this.root.addNode2(newNode2); //交由Node2类来进行节点保存
}
}
public void print(){ //输出数据
if(this.root!=null){
this.root.printNode2(); //交由Node2类输出
}
}
}
public class LinkDemo1 {
public static void main(String args[]){
Link link=new Link(); //由这个类负责所有的数据操作
link.add("Hello"); //存放数据
link.add("World");
link.add("小关");
link.print(); //展示数据
}
}
//结果
//Hello
//World
//小关
开发可用链表
在链表中使用内部类是一个好的选择。
1.内部类可以使用private定义,这样一个内部类只能被一个外部类使用;
2.内部类可以方便地与外部类之间进行私有属性的直接访问。
例:数据增加:public void add(数据类型 变量)
class Link3{
private class Node{ //定义的内部节点类
private String data;
private Node next; //下一个节点引用
public Node(String data){ //每一个Node类对象都必须保存相应数据
this.data=data;
}
public void addNode(Node newNode){
if(this.next==null){ //若当前的下一个节点为null
this.next=newNode; //保存节点
}
else{ //向后继续保存
this.next.addNode(newNode);
}
}
}
private Node root;
public void add(String data){ //假设不允许有null
if (data==null){ //判断数据是否为空
return ;
}
Node newNode=new Node(data); //要保存的数据
if (this.root==null){ //当前没有根节点
this.root=newNode; //保存根节点
}
else{ //根节点存在
this.root.addNode(newNode);
}
}
}
public class LinkDemo2 {
public static void main(String args[]){
Link3 all=new Link3(); //创建链表对象
all.add("Hello"); //保存数据
all.add("World");
all.add(null);
}
}