单链表实现(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(); } }
相关文章推荐
- python-flask简单服务器框架
- 浅谈析构函数
- hust 1010 The Minimum Length(KMP求最小循环节)
- 彼得原理(The Peter Principle)
- [HDOJ]BestCoder Round #61
- PHP(Hypertext Preprocessor)
- C#集合u
- 解决Hadoop 2.7.1无法加载本地库问题
- AIC准则选三个变量的r语言代码
- openStack 初步学习
- HDU 5525 Product
- hdu 1045 Fire Net
- Local Reference and Global Reference
- hdoj--1028--Ignatius and the Princess III(母函数)
- 单链表实现(1)
- 我决定采取策略
- HOJ-1005
- 《软件需求十步走》阅读笔记三
- hdoj--1028--Ignatius and the Princess III(母函数)
- Android 内存优化(1)