单链表的实现

此单链表的说明:
该单链表实现了对元素的增、删、改、查。
该链表没有实现各元素的编号,显示的是各个元素的节点信息
该链表不允许存在两个信息完全相同的节点(当然如果你添加了相同信息的元素,会有提示反馈)
各种方法的细节可看代码注释
package CSDN;

import java.util.Scanner;

/**
 * 单链表的实现
 * 包含链表的 增、删、改、查
 * @author Babulakaka
 * @create 2021-06-11 9:30
 */
public class SingleListDemo {
    public static void main(String[] args) {
        SingleLinkedList singleLinkedList = new SingleLinkedList();
        boolean loop=true;
        while(loop){
            Scanner scanner = new Scanner(System.in);
            System.out.println("a:添加链表元素");
            System.out.println("d:删除链表元素");
            System.out.println("s:显示当前队列");
            System.out.println("m:修改元素的信息");
            System.out.println("f:查找指定用户信息");
            System.out.println("e:退出");
            char c = scanner.next().charAt(0);
            switch(c){
                case 'a':
                    System.out.print("请输入要添加元素的姓名:");
                    String nameA = scanner.next();
                    System.out.print("请输入要添加元素的年龄:");
                    int ageA = scanner.nextInt();
                    singleLinkedList.addNode(nameA,ageA);
                    break;
                case 'd':
                    System.out.print("请输入要删除元素的姓名:");
                    String nameD = scanner.next();
                    System.out.print("请输入要删除元素的年龄:");
                    int ageD = scanner.nextInt();
                    singleLinkedList.deleteNode(nameD,ageD);
                    break;
                case 'm':
                    System.out.print("请输入要修改元素的姓名:");
                    String nameM = scanner.next();
                    System.out.print("请输入要修改元素的年龄:");
                    int ageM = scanner.nextInt();
                    singleLinkedList.modifyNode(nameM,ageM);
                    break;
                case 's':
                    singleLinkedList.show();
                    break;
                case 'f':
                    System.out.println("请输入要查到的用户姓名:");
                    String nameF = scanner.next();
                    singleLinkedList.findNode(nameF);
                    break;
                case 'e':
                    loop=false;
                    break;
            }
        }
    }
}
class Node{
    public String name;//节点属性
    public int age;//节点属性
    public Node next;//指向下一个节点
    //构造器
    public Node(){

    }
    public Node(String name){
        this.name=name;
    }
    public Node(String name,int age){
        this.name=name;
        this.age=age;
    }

    @Override
    public String toString() {
        return "姓名:" + name+ " " + "年龄:"+ age;
    }
}
class SingleLinkedList{
    Node head = new Node();//头结点
    public static int COUNTER;//记录节点的编号
    //节点的添加
    public void addNode(String name,int age){
        Node node = new Node(name,age);//给新节点赋初始属性
        Node temp = head;//头结点的dog,方便遍历,查询等操作
        //首先查看该节点是否存在于该链表中
        while (true){
            if(temp.name==node.name&&temp.age==node.age){
                System.out.println("当前输入的节点已经存在与该链表中");
                return;
            }
            if(temp.next==null){//此时退出循环的temp就是当前链表的最后一个节点
                break;
            }
            temp=temp.next;
        }
        //遍历链表找到位于链表的最后的节点
        while (true){
            if(temp.next==null){//此时退出循环的temp就是当前链表的最后一个节点
                break;
            }
            temp=temp.next;
        }
        temp.next=node;//新节点加入当前链表
        System.out.println("加入成功");
    }
    //节点的删除,根据节点的属性删除节点;前提是该节点不允许出现相同属性的节点。
    public void deleteNode(String name,int age){
        Node temp = head;//头结点的dog,方便遍历,查询等操作
        Node node = new Node(name,age);
        //判断链表中个是否有节点
        if(head.next==null){
            System.out.println("当前链表没有节点,无法删除");
            return;
        }
        while (true){
            if(temp.next==null){//此时退出循环的temp就是当前链表的最后一个节点
                break;
            }
            //寻找要删除的元素,并且将其删除
            if(temp.next.name.equals(node.name)&&temp.next.age==node.age){
                temp.next = node.next;
                System.out.println("删除成功节点:"+node.name);
                return;
            }
            temp=temp.next;
        }
        System.out.println("没有找到要删除的元素");
    }
    //显示当前链表
    public void show(){
        Node temp = head;//头结点的dog,方便遍历,查询等操作
        if(temp.next==null){
            System.out.println("当前链表没有元素");
            return;
        }
        while (true){
            temp=temp.next;
            System.out.println(temp.toString());
            if(temp.next==null){
                break;
            }
        }
    }

    //修改链表中的属性
    public void modifyNode(String name,int age){
        Node temp = head;//头结点的dog,方便遍历,查询等操作
        Node node = new Node(name,age);
        if(temp.next==null){
            System.out.println("当前链表没有元素");
            return;
        }
        while (true){
            if(temp.next==null){//此时退出循环的temp就是当前链表的最后一个节点
                break;
            }
            temp=temp.next;
            //寻找要修改的元素,并且将其修改
            if(temp.name.equals(node.name)&&temp.age==node.age){
                System.out.println("请输入修改后的姓名:");
                Scanner scanner = new Scanner(System.in);
                String nameM = scanner.next();
                System.out.println("请输入修改后的年龄: ");
                int ageM = scanner.nextInt();
                temp.name=nameM;
                temp.age=ageM;
                System.out.println("修改成功~~");
                return;
            }else {
                System.out.println("没有找到所要修改的元素");
            }

        }

    }
    //查找链表元素的信息,可根据姓名查找对应的用户信息
    public void findNode(String name){
        Node temp=head;
        Node node = new Node(name);
        if(head.next==null){
            System.out.println("链表为空,没有元素");
            return;
        }
        while (true){
            temp=temp.next;
            if(temp.name.equals(node.name)){
                System.out.println("查到指定用户:用户姓名为:"+temp.name+" 年龄为"+temp.age);
                return;
            }

            if(temp.next==null){
                System.out.println("没有找到指定的客户");
                break;
            }
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值