题解 | #【模板】链表#

【模板】链表

https://www.nowcoder.com/practice/97dc1ac2311046618fd19960041e3c6f

/**
 * @author SuperStar1946
 * @description:这是我在本地idea中写的java代码,因为备注信息比较全,也便于调教,所以粘贴的这个,删除大部分输出就可以满足题目要求了。
 * @create 2022-10-08-11:10
 */

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {

        SingleLinkedList singleLinkedList = new SingleLinkedList();

        Scanner in = new Scanner(System.in);
        System.out.print("请输入操作次数(大于等于1,小于等于10000): ");
        int times = in.nextInt();
        while (times <1 || times >10000){
            System.out.println("输入的数据非法,请重新输入!");
            times = in.nextInt();
        }
        System.out.println();

        int count = 0;
        // 注意 hasNext 和 hasNextLine 的区别
        while (count < times) { // 注意 while 处理多个 case
            System.out.println("请选择操作,i为插入节点,d为删除节点。");
            String select = in.next();
            switch (select){
                case "i":
                    System.out.print("insert\t");
                    int a = in.nextInt();
                    int b = in.nextInt();
                    System.out.println();
                    Node x = new Node(a);
                    Node y = new Node(b);
                    singleLinkedList.insert(x,y);
                    singleLinkedList.showList();
                    break;
                case "d":
                    System.out.print("delete\t");
                    int c = in.nextInt();
                    Node node = new Node(c);
                    System.out.println();
                    singleLinkedList.deleteList(node);
                    singleLinkedList.showList();
                    break;
                default:throw new RuntimeException("输入错误,程序结束。");
            }
            count++;
        }
    }
}
class SingleLinkedList{
    Node head = new Node(-1);
    //插入节点
    void insert(Node x,Node y){
        //链表指针
        Node index = head;
        //判断是否找到x,找到x则为真,没有找到为false。
        boolean flag = false;
        if(index.next ==null){
            System.out.println("链表为空,节点y插入到链表末尾。");
            head.next = y;
            return;
        }
        if (x == null|| y ==null) {
            System.out.println("输入的节点为空,无法插入节点。");
            return;
        }
        while (index.next != null){
            //判断是否存在x,如果存在x,则插入x结点之前
            if(index.next.id == x.id){
                y.next = index.next;
                index.next = y;
                System.out.println("插入成功,节点y插入到x的前面。");
                flag = true;
                return;
            }
            //迭代
            index = index.next;
        }
        //没有找到x,则插入到链表的末尾
        if(!flag){
            index.next = y;
            System.out.println("插入成功,节点y插入到链表的末尾。");
            return;
        }
    }
    //显示链表
    void showList(){
        Node index = head.next;
        if(index == null){
            System.out.println("NULL");
            return;
        }
        System.out.print("输出链表:");
        while (index!= null){
            System.out.print(index+"\t");
            index = index.next;
        }
        System.out.println();
    }
    //删除节点
    void deleteList(Node node){
        //判断是否找到要删除的节点
        boolean flag = true;
        if (node == null) {
            System.out.println("节点为空,无法删除。");
            return;
        }
        Node index = head;
        if(index.next == null){
            System.out.println("链表为空,无法删除。");
            return;
        }
        while (index.next !=null){
            if(index.next.id == node.id){
                flag = false;
                index.next = index.next.next;
                System.out.println("节点删除成功,节点id为:"+node.id);
                return;
            }
            //迭代
            index = index.next;
        }
        if(flag){
            System.out.println("没有找到要删除的节点,无法删除。");
            return;
        }
    }

}
class Node{
    int id;
    Node next;

    public Node(){
    }

    public Node(int x) {
        this.id = x;
    }

    @Override
    public String toString() {
        return id+"";
    }
}

#Java开发#
全部评论

相关推荐

重生我想学测开:嵌入式的问题,我准备入行京东外卖了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务