链表的每一个节点中除了要保存本身的内容之后,还要保存下一个节点的引用
简单的建立一个链表,表头是root
//================================================= // File Name : linked list demo //------------------------------------------------------------------------------ // Author : Common // 类名:Node // 成员:1.节点内容 // 2.下一个节点 // 方法:1.得到节点内容 // 2.设置下一个节点 // 3.取得下一个节点 class Node { private String data; //保存节点内容 private Node next; //保存下一个节点 public Node(String data){ //构造方法设置节点内容 this.data = data; } public String getData(){ //得到节点内容 return this.data; } public void setNext(Node next){ //设置下一个节点 this.next = next; } public Node getNext(){ //取得下一个节点 return this.next; } }; //主类 //Function : linked list public class linkdemo { //主方法 public static void main(String[] args) { // TODO 自动生成的方法存根 Node root = new Node("火车头"); //定义根节点 Node n1 = new Node("车厢A"); //定义第1个车厢 Node n2 = new Node("车厢B"); //定义第2个车厢 Node n3 = new Node("车厢C"); //定义第3个车厢 root.setNext(n1); //火车头的下一个节点是第1个车厢 n1.setNext(n2); //第1个车厢的下一个节点是第2个车厢 n2.setNext(n3); //第2个车厢的下一个节点是第3个车厢 printNode(root); } //输出方法,全局方法 //输出节点的内容 public static void printNode(Node node){ System.out.println(node.getData()); //输出数据 if(node.getNext() != null){ //判断节点是否为空 printNode(node.getNext()); //继续向下打印 } } }
使用了内部类
在链表中进行删除、查询操作
//================================================= // File Name : linked list demo //------------------------------------------------------------------------------ // Author : Common class Link{ // 成员:1.root private Node root; //建立根节点 // 方法:1.添加节点方法 public void addNode(String data){ Node newNode = new Node(data); //建立一个新的节点 if(this.root == null){ this.root = newNode; //如果没有根节点,则把上面建立的节点设置成根节点 }else{ this.root.add(newNode); //如果有根节点,则把上面建立的节点设置成root节点后非空的节点 } }; // 方法:2.输出全部节点方法 public void printNode(){ //输出节点的内容 if(this.root != null){ //判断是否存在根节点 this.root.print(); //继续向下打印 } }; // 方法:3.判断元素是否存在 public boolean contains(String name){ //判断元素是否存在 return this.root.search(name); //调用Node类中的search()方法 }; // 方法:4.删除节点 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); //删除节点 } } } // 内部类名:Node // 成员:1.节点内容 2.下一个节点 // 方法:1.得到节点内容 2.设置下一个节点 3.取得下一个节点 4.添加下一个节点 5.从某处删除一个节点 6.节点的查询结果 7.输出方法 class Node { private String data; //保存节点内容 private Node next; //保存下一个节点 public Node(String data){ //构造方法设置节点内容 this.data = data; } public String getData(){ //1.得到节点内容 return this.data; } public void setNext(Node next){ //2.设置下一个节点 this.next = next; } public Node getNext(){ //3.取得下一个节点 return this.next; } public void add(Node newNode){ //4.添加下一个节点 if(this.next == null){ //判断下一个节点是否为空 this.setNext(newNode); //如果下一个节点为空,则把新节点设置在next的位置上 }else{ //如果不为空,则表示还有下一个节点 this.next.add(newNode); //在下一个位置处增加 } } public void delete(Node preNode,String data){ //5.从某处删除一个节点 if(data.equals(this.data)){ //找到了匹配的节点 preNode.next = this.next; //把前一个节点链接到后一个节点上 }else{ if(this.next != null){ this.next.delete(this, data); //继续向下找 } } } public boolean search(String data){ //6.定义搜索方法 if(data.equals(this.data)){ //判断当前节点的数据是否与查找的一致 return true; }else{ if(this.next != null){ //如果下一个节点存在,就继续查找 return this.next.search(data); //返回下一个节点的查询结果 }else{ return false; } } } public void print(){ //7.定义全部输出方法 System.out.print(this.data + " "); //没有判断是否存在根节点 if(this.next != null){ //如果下一个节点不为空的话,继续打印 this.next.print(); //继续打印下一个节点 } } }; } //主类 //Function : linked list public class linkdemo { //主方法 public static void main(String[] args) { // TODO 自动生成的方法存根 Link l = new Link(); l.addNode("A"); l.addNode("B"); l.addNode("C"); l.addNode("D"); l.addNode("E"); System.out.println("===========删除之前==========="); l.printNode(); l.deleteNode("C"); l.deleteNode("D"); System.out.println(); System.out.println("===========删除之后==========="); l.printNode(); System.out.println(); System.out.println("查询节点:"+l.contains("A")); } }