单向循环链表

自己靠感觉实现的一个单向循环链表,写的代码很low~~~


public class Josephu {

    public static void main(String[] args) {

        SingleCircleLinkedList list = new SingleCircleLinkedList();
        Node node1 = new Node(1);
        Node node2 = new Node(2);
        Node node3 = new Node(3);
        Node node4 = new Node(4);
        Node node5 = new Node(5);
        Node node6 = new Node(6);
        Node node7 = new Node(7);
        Node node8 = new Node(8);

        list.add(node1);
        list.add(node2);
        list.add(node3);
        list.add(node4);
        list.add(node5);
        list.add(node6);
        list.add(node7);
        list.add(node8);
        list.show();

        System.out.println("删除节点========");
        list.delete(2);
        list.delete(7);
        list.show();
        System.out.println("删除尾节点======");
        list.delete(8);
        list.show();
        System.out.println("删除头节点======");
        list.delete(1);
        list.show();

        System.out.println("################");
        list.delete(3);
        list.delete(4);
        list.delete(5);
        list.delete(6);
        list.delete(6);
        list.show();
    }
}

class SingleCircleLinkedList {
    private Node first;

    public SingleCircleLinkedList() {
        first = new Node(-1);
    }

    public void add(Node newNode) {
        //添加的第一个节点,自己指向自己
        if (first.next == null) {
            first = newNode;
            newNode.next = first;
            return;
        }
        Node cur = first;
        while (cur.next != first) {
            cur = cur.next;
        }
        //添加新的节点到末尾,并指向第一个节点
        cur.next = newNode;
        newNode.next = first;
    }

    public void delete(int num) {
        //判断循环链表是否为空
        if (isEmpty()) {
            System.out.println("链表为空~");
            return;
        }
        //判断是否是最后一个节点
        if (first == first.next) {
            first.next = null;
            return;
        }
        Node cur = first;
        //用于记录删除节点的上一个节点
        Node temp = null;
        while (cur.num != num) {
            temp = cur;
            cur = cur.next;
        }
        //判断删除的节点是否是第一个节点,是则让下一个节点作为第一个节点
        if (cur == first) {
            Node lastNode = getLastNode();
            first = first.next;
            lastNode.next = first;
            return;
        }
        //所要删除节点的上一个节点指向删除节点的下一个节点
        temp.next = cur.next;
    }

    /**
     * 获取循环链表的最后一个节点
     *
     * @return
     */
    public Node getLastNode() {
        if (isEmpty()) {
            System.out.println("链表为空~");
        }
        Node cur = first;
        while (cur.next != first) {
            cur = cur.next;
        }
        return cur;
    }

    /**
     * 判断链表是否为空
     */
    public boolean isEmpty() {
        if (first.next == null) {
            return true;
        }
        return false;
    }

    /**
     * 遍历展示链表中所有的元素
     */
    public void show() {
        if (isEmpty()) {
            System.out.println("链表为空~");
            return;
        }
        Node cur = first;
        while (cur.next != first) {
            System.out.println(cur);
            cur = cur.next;
        }
        System.out.println(cur);
    }

    /**
     * 获取链表的长度
     *
     * @return
     */
    public int size() {
        Node cur = first;
        int count = 0;
        while (cur.next != first) {
            count++;
            cur = cur.next;
        }
        return count;
    }

}

class Node {
    public int num;
    public Node next;

    public Node(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "Node{" +
                "num=" + num +
                '}';
    }
}

内容概要:该题库专为研究生入学考试计算机组成原理科目设计,涵盖名校考研真题、经典教材课后习题、章节题库和模拟试题四大核心模块。名校考研真题精选多所知名高校的计算机组成原理科目及计算机联考真题,并提供详尽解析,帮助考生把握考研命题趋势与难度。经典教材课后习题包括白中英《计算机组成原理》(第5版)和唐朔飞《计算机组成原理》(第2版)的全部课后习题解答,这两部教材被众多名校列为考研指定参考书目。章节题库精选代表性考题,注重基础知识与重难点内容,帮助考生全面掌握考试大纲要求的知识点。模拟试题依据历年考研真题命题规律和热门考点,精心编制两套全真模拟试题,并附标准答案,帮助考生检验学习成果,评估应试能力。 适用人群:计划参加研究生入学考试并报考计算机组成原理科目的考生,尤其是需要系统复习和强化训练的学生。 使用场景及目标:①通过研读名校考研真题,考生可以准确把握考研命题趋势与难度,有效评估复习成效;②通过经典教材课后习题的练习,考生可以巩固基础知识,掌握解题技巧;③通过章节题库的系统练习,考生可以全面掌握考试大纲要求的各个知识点,为备考打下坚实基础;④通过模拟试题的测试,考生可以检验学习成果,评估应试能力,为正式考试做好充分准备。 其他说明:该题库不仅提供详细的题目解析,还涵盖了计算机组成原理的各个方面,包括计算机系统概述、数据表示与运算、存储器分层、指令系统、中央处理器、总线系统和输入输出系统等。考生在使用过程中应结合理论学习与实践操作,注重理解与应用,以提高应试能力和专业知识水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值