java实现单向链表的增、删、改、查

来源:互联网 发布:书桌正对窗户 知乎 编辑:程序博客网 时间:2024/05/16 07:27

                         单向链表

作者:vashon

package com.ywx.link;/** * 单向链表 * @author vashon * */public class LinkTest {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("\n包含D:"+l.contains("D"));System.out.println("==========删除之前的内容==========");l.deleteNode("A");System.out.println("==========删除之后的内容==========");l.printNode();}}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{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{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(root==null){root=newNode;}else{root.add(newNode);}}public void printNode(){//链表的输出if(root!=null){root.print();}}public boolean contains(String name){//判断元素是否存在return this.root.search(name);}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);//把下一个节点的前节点和要删除的节点内容一起传入}}}}


1 0