Java链表基础(3)-基本操作

来源:互联网 发布:淘宝怎么搜同城店铺 编辑:程序博客网 时间:2024/06/05 19:46

代码:



/*方法名称及作用public void add()     添加数据public int size()取得链表中保存的元素个数public boolean isEmpty()  判断是否为空链表· root 是否为空· count 是否为0public boolean contains(数据类型 变量)  判断某一个数据是否存在(使用equals())public 数据类型 get(int index) 根据索引取得数据public void set(int index,数据类型)修改制定索引的内容public void remove(数据类型 变量)删除数据内容,如果是对象则需要对象比较· 删除指定节点· 删除根节点 -> root直接指向下一个(Link类里面处理)· 删除其他节点 -> 节点前一个指向下一个(Node类里面实现)· 删除指定内容· 删除指定对象*/class Link{private class Node{private String data;private Node next;public Node(String data){this.data = data;}public void addNode(Node newNode){ //增加方法if(this.next == null){this.next  = newNode;}else{this.next.addNode(newNode);}}public boolean containsNode(String data){ //根据内容查询数据if(data.equals(this.data)){return  true; //后面不再查询}else{if(this.next != null){//有后续节点,继续查询return this.next.containsNode(data);}// 没有后续节点 , 返回falseelse{return false;}}}public void printNode(Node node){ //输出数据System.out.print(this.data+"->");if(node.next != null) this.next.printNode(next);}public String getNode(int index){//查询指定索引内容if(Link.this.foot++ == index){  //不相等自动进行下一个return this.data;}else{return this.next.getNode(index);}}public void setNode(int index,String data){ // 修改指定索引的内容if(Link.this.foot++ == index){this.data = data;}else{this.next.setNode(index, data);}}public void removeNode(Node previous,String data){ //处理非根节点的删除if(data.equals(this.data)){//当前节点就是要删除的节点previous.next = this.next; //上一个节点直接指向下一个节点}else{this.next.removeNode(previous.next, data);}}}//===============以上为内部类============private Node root;private int foot = 0; // 索引private int count = 0;//保存元素个数public void add(String data){ //数据增加if(data == null) //为空不保存return ;Node newNode = new Node(data);if(this.root == null){this.root = newNode;}else{this.root.addNode(newNode); //增加判断转到Node()类}this.count++;}public int size(){ //取得保存的数据量return this.count;}public boolean isEmpty(){ //判断链表是否为空return this.count==0;} public boolean contains(String data){ //查询//没有查询结果或者根节点没数据if(data == null || this.root == null)return false;return this.root.containsNode(data);}public String get(int index){ //查询指定索引的内容this.foot = 0;if(index > count)return null;//没有数据elsereturn this.root.getNode(index);}public void set(int index,String data){ //修改指定索引内容this.foot = 0;if(index > this.count)return ; //结束elsethis.root.setNode(index,data);}public void print(){ // 输出数据if(this.root == null)return ;elsethis.root.printNode(root);}public void remove(String data){  // 删除指定内容的节点if(this.contains(data)){//contains保证数据存在if(data.equals(this.root.data)){//删除的为根节点this.root = this.root.next;}else{ //不是根节点,从第二个节点开始this.root.next.removeNode(this.root, data);}this.count --;  //删除后个数-1}}}public class Demo1 {public static void main(String[] args) {Link link = new Link();link.add("a");link.add("b");link.add(null );link.add("c");System.out.println("查询b是否存在:"+link.contains("b")); //查询bSystem.out.println("查询d是否存在:"+link.contains("d")); //查询dSystem.out.println("索引为1 的数据为:"+link.get(1)); // 根据索引查询link.print();System.out.println();System.out.println("判断是否为空链表:"+link.isEmpty()); //判断是否为空链表link.set(1, "sss"); //修改索引为1的内容为sssSystem.out.println("修改索引为1的内容为sss");link.print();System.out.println();System.out.println("删除内容为c的节点");link.remove("c");link.print();System.out.println();System.out.println("保存的数据量:" + link.size());//保存的数据量}}


0 0