链表一般操作

/*对节点的操作进行封装,这样使用户使用起来比较方便
  假设现在操作有一下几种:
  增加节点:在链表的最后进行增加
  查找节点:依次递归的方式进行查找
  删除节点:实际上是改变引用的传递地址,直接修改上一个节点的引用地址即可
*/


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){   //如果下一个节点为空,则把节点设置在next的位置上
  this.next=newNode;
  }else{     //如果不为空,则寻找下一个节点
  this.next.Add(newNode);
  }    
 }
 
 public void print(){    //定义一个打印节点的方法
  System.out.print(this.data+"\t");
  if(this.next!=null){    //判断节点下一个节点
  this.next.print(); 
  }   
 }
 
 public boolean search(String data){  //内部搜索的方法
  if(data.equals(this.data)){  
  return true;
  }else{  //向下判断
  if(this.next!=null){    //判断下一个节点是否非空
  return this.next.search(data);  //返回下一个查询结果
  }else{  //如果所有节点查询完之后,没有内容相等,返回false
  return 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.search(name);  //调用Node类中的search方法
 }
 
 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 LinkDemo{
public static void main(String args[]){
Link node=new Link();
node.AddNode("A");  //增加节点A
node.AddNode("B");  //增加节点B
node.AddNode("C");  //增加节点C
node.AddNode("D");  //增加节点D
node.AddNode("E");  //增加节点E

node.printNode();

//System.out.println(node.contains("A"));

node.deleteNode("B");
node.printNode();
}
  
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值