完整代码实例-Java实现单链表的尾插入,定点插入,查找,修改,删除,遍历输出

package DataStrcture.ArrayDemo.singlelistdemo;

public class SingleList_copy_copy {
    ///
    /*
        1. 结点内部类
     */
    public static class Node{
        public Node next;
        public String name;
        public int age;

        //构造器初始化结点类
        public Node( int _age,String _name){
            this.name = _name;
            this.age = _age;
        }
        ///toStirng()
        public String toString(){
            return "Name: "+name+"-"+age+"岁";
        }
        //get 和 set 方法 用于数据域的访问和改变
        public  void setName(String name){
            this.name = name;
        }
    }
    ///路标: 头结点
    Node head = new Node(0,"");

    2. 结点的插入
    /*
    尾插法,  temp.next = node;
     */
    public void addNode(Node node){
        ///临时结点,遍历链表
        Node temp = head;
        //循环遍历链表
        while(true){
            if(temp.next == null)
                break;
            temp = temp.next;
        }
        temp.next = node;
    }

    ///3. 链表的修改
    //把吃粑粑改成吃馍馍
    public void edit(String name){
        Node temp = head;

        while(true){
            if(temp.next.name.equals("吃粑粑"))
                break;
            temp = temp.next;
        }
        temp = temp.next;
        temp.setName(name);

    }


    ///3. 结点的遍历输出
    public void list(){

        Node temp = head;

        while(true){
            if(temp.next == null)
                break;

            temp = temp.next;
            System.out.println(temp);

        }
    }

    4. 结点的删除
    /*
    temp.next =temp.next.next;
     */
    public void deleteNode(Node node) {
        ///临时结点
        Node temp = head;
        //查找结点位置
        while (true) {
            if (temp.next == null) {
                System.out.println("查找失败");
                break;
            }
            temp = temp.next;
            if (temp.next == node) {
                temp.next = temp.next.next;
                break;
            }
        }
    }
        5. 结点的定点插入
    /*
     node.next = temp.next;
     temp.next = node;
     */
    public void insertNode(Node node,String name){
        ///查找插入位置
        / 比如我们插入到name="吃粑粑"的后面
        ///临时变量
        Node temp= head;
        boolean flag = false;//标记是否找到

        if (temp.next == null){
            System.out.println("链表为空,无法找到插入位置");
        }
        while(true){
            if(temp.next.name.equals(name)){
                flag=true;
                break;
            }

            temp = temp.next;
        }
        if(flag){
            temp = temp.next; //找到目标name
            node.next = temp.next;
            temp.next = node;
        }
    }



    ///测试
    public static void main(String[] args) {
        ///新建结点类,初始化数据域
        Node node_1 = new Node(38,"王老吉");
        Node node_2 = new Node(17,"花姑娘");
        Node node_3 = new Node(17,"周翠花");
        Node node_4 = new Node(28,"小猪");
        Node node_5 = new Node(33,"小狗");
        Node node_7 = new Node(33,"买奥克斯空调");

        ///待插入结点
        Node node_6 = new Node(33,"吃粑粑");
        ///新建链表
        SingleList_copy_copy sl = new SingleList_copy_copy();
        ///链表加入结点
        sl.addNode(node_1);
        sl.addNode(node_2);
        sl.addNode(node_3);
        sl.addNode(node_4);
        sl.addNode(node_5);
        sl.addNode(node_7);

        System.out.println("把吃粑粑插入到小狗结点的后面");
        sl.insertNode(node_6,"小狗");
        sl.list();
        System.out.println("===========================");
        System.out.println("删除了花姑娘结点: ");
        sl.deleteNode(node_2);
        System.out.println("把吃粑粑改成了吃馍馍: ");
        sl.edit("吃馍馍");
        sl.list();
    }
}

-输出结果:
在这里插入图片描述

posted @ 2022-05-26 20:31  青松城  阅读(23)  评论(0编辑  收藏  举报