面向对象基础:--链表的改进
采用内部类完成链表的操作1、增加节点,在链表的最后进行增加
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{// 如果不为空,则需要向下继续找nextthis.next.add(newNode) ;}}public void print(){System.out.print(this.data + "\t") ;// 输出节点内容if(this.next!=null){// 还有下一个元素,需要继续输出this.next.print() ;// 下一个节点继续调用print}}public boolean search(String data){// 内部搜索的方法if(data.equals(this.data)){// 判断输入的数据是否和当前节点的数据一致return true ;}else{// 向下继续判断if(this.next!=null){// 下一个节点如果存在,则继续查找return this.next.search(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.search(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("X")) ;l.deleteNode("C") ;// 删除节点l.deleteNode("D") ;// 删除节点l.deleteNode("A") ;// 删除节点System.out.println("\n====== 删除之后 =========") ;l.printNode() ;System.out.println("\n查询节点:" + l.contains("B")) ;}};