Java数据结构实现单链表

用java语言实现单链表并完成如下操作:

/*1.建立具有5个元素的单链表,5个元素的值自己指定*/

 /*2.输出当前单链表*/

/*3.在第4个位置插入值为15的元素*/

 /*4.输出插入后的单链表*/

 /*5.输出单链表的长度*/

/*6.从键盘读入一个值,在单链表中查找该值并将结果输出*/

/*7.从键盘读入一个值i,在单链表中查找第i个元素并将结果输出*/  

/8.从键盘读入一个值i,删除单链表中第i个元素/

/*9.输出删除后的单链表*/

public class Node {

    String name;
    //自引用,下一个节点的地址
    Node next;
    public Node() {
        
    }
    public Node(String name) {
        this.name = name;
        next = null;
    }
}

//链表
public class Link {

    //定义头节点
    Node head;
    //初始化
    public Link() {
        //建表
        head = new Node();
        head.next = null;
    }
    //新增节点
    public void addNode(String data){
        /*1.获取表头
         *2.通过表头找到最后一个元素;
         *3.把新增的节点放到最后一个元素的后面
         * */
        Node p = head;
        while(p.next!=null){
            p=p.next;
        }
        //需要新增的节点
        Node temp = new Node(data);
        p.next = temp;
    }
    //删除节点
    public void delNode(String data){
        /*1.获取表头
         *2.通过表头找到最后一个元素;
         *3.把最后一个元素删除
         * */
        Node p = head;
        while(p.next!=null){
            //删除节点
            if(p.next.name.equals(data)){
                p.next = p.next.next;
                break;
            }else{
                p=p.next;
            }
            
        }
    }
    //遍历
    public void display(){
        Node p = head;
        while(p.next!=null){
            System.out.println(p.next.name+"->>");
            p=p.next;
        }
    }
    //查找
    public void findNode(String data){
        /*1.获取表头
         *2.通过表头找到最后一个元素;
         *3.把最后一个元素删除
         * */
        Node p = head;
        while(p.next!=null){
            //删除节点
            if(p.next.name.equals(data)){
                System.out.println("data="+p.next.name);
                break;
            }else{
                p=p.next;
            }
            
        }
    }
    //插入节点
    public void insertNode(String param,String data){
        
        /*param表示新增的节点要插入到该节点的后面
         * 
         *1.获取表头
         *2.通过表头找到param元素的节点;
         *3.把新增的节点放到改节点的后面
         * */
        Node p = head;
        while(p.next!=null){
            if(p.next.name.equals(param)){
                Node t = p.next;
                Node insertNode = new Node(data);
                
                insertNode.next = t.next;
                t.next = insertNode;
                break;
            }else{
                p=p.next;
            }
        }
    }
    //链表大小
    public int size(){
        int n=0;
        Node p = head;
        while(p.next!=null){
            p=p.next;
            n++;
        }
        return n;
    }
    public static void main(String[] args) {
        Link link = new Link();
        link.addNode("组长");
        link.addNode("部门经理");
        link.addNode("主管副总");
        link.addNode("总经理");
        link.display();
        System.out.println("size="+link.size());
        link.delNode("部门经理");
        link.display();
        System.out.println("---------------------------");
        link.insertNode("组长", "部门经理");
        link.display();
    }
}