您的位置:首页 > 其它

单链表实现(2)

2015-10-31 22:26 357 查看
class Link{//链表的完成类
class Node{//保存每一个结点,此处为了方便直接定义成内部类
private String data;// 保存结点的内容
private Node next; //保存下一个结点
public Node(String data){//通过构造方法设置结点内容
this.data=data;
}
public void add(Node newNode){//将结点加入到合适的位置
if(this.next==null){//如果下一个结点为空,则把新结点加入到下一结点的位置
this.next=newNode;
}else{//如果不为空,则需要继续向下寻找next
this.next.add(newNode);//实现的是递归的方式
}
}
public void print(){
System.out.print(this.data+"\t");//输出结点内容
if(this.next!=null){//还有下一个元素,需要继续输出
this.next.print();//下一个结点继续调用print,递归实现
}
}
public boolean searchNode(String data){//内部搜索的方法
if(data.equals(this.data)){//判断输入的数据是否和当前数据一致
return true;
}else{//向下继续判断
if(this.next!=null){//下一个结点是否为空
return this.next.searchNode(data);//返回下一个结点查询结果,地轨实现
}else{
return false;//如果所有的结点遍历完之后,没有内容相等,则返回false
}
}
}
public void delete(Node previous,String data){
if(data.equals(this.data)){//找到了匹配的结点
previous.next=this.next;//删除结点
}else{
if(this.next!=null){//还存在下一个结点
this.next.delete(this,data);//继续删除
}
}
}
}
private Node root;//链表中必然存在一个根结点
public void addNode(String data){//增加结点
Node newNode=new Node(data);//定义新的结点
if(this.root==null){//没有根结点
this.root=newNode;//将第一个结点设置成根结点
}else{//不是根结点,放到最后一个结点之后
this.root.add(newNode);//通过Node自动安排此节点的位置
}
}
public void printNode(){//输出全部的链表内容
if(this.root!=null){//如果根元素不为空
this.root.print();//调用Node类中的输出操作
}
}
public boolean contains(String name){//判断元素是否存在
return this.root.searchNode(name);//调用Node类中的查找方法
}
public void deleteNode(String data){//删除结点
if(this.contains(data)){//判断结点是否存在
//一定要判断此元素是否与根元素相等
if(this.root.data.equals(data)){
this.root=this.root.next;//修改根结点,将第一个结点设置成根结点
}else{
this.root.next.delete(root,data);//把下一个结点的前结点合数据一起传过去
}
}
}

}
public class LinkDemo02{
public static void main(String args[]){
Link l=new Link();
l.addNode("A");//增加结点
l.addNode("B");
l.addNode("C");
l.addNode("D");
l.addNode("E");
System.out.println("========增加之后的内容==========");
l.printNode();
System.out.println(l.contains("E"));
l.deleteNode("E");
l.printNode();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: