单向环形链表构建(代码实现) [Java][数据结构]

发布于:2022-12-31 ⋅ 阅读:(167) ⋅ 点赞:(0)

单向环形链表构建(代码实现)

首先给出结点类:

/**
 * 单线环形链表的结点类
 */
class Boy{
    private int no;
    private Boy next;

    public Boy(){

    }

    public Boy(int no) {
        this.no = no;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public Boy getNext() {
        return next;
    }

    public void setNext(Boy next) {
        this.next = next;
    }
}

接下来给出单向环形链表的具体代码实现:

package com.ffyc.linkedlist;

/**
 * 单向环形链表类
 */
public class CircleSingleLinkedList {
    //创建一个first指针
    Boy first = null;

    //创建一个curBoy指针
    Boy curBoy = null;

    //创建一个长度为nums的单向环形链表
    public void addBoy(int nums){
        //做一个数据校验(也就是做一个合法性判断)
        if(nums < 1){
            System.out.println("nums的值不正确");
            return;
        }
        for (int i = 0; i < nums; i++) {
            //每次循环都创建一个新的结点,这个创建的结点就是准备插入到单向环形链表中的结点
            Boy boy = new Boy(i+1);
            //判断,如果是第一个节点,这个时候我们要先让其形成一个环,并且还要完成first指针和curBoy指针的指向,所以对于第一个节点我们要进行一个特殊处理
            //而特殊处理我们一般都是使用if语句来实现
            if(i == 0){
                first = boy; //让first指针指向第一个节点
                curBoy = boy; //让curBoy指向唯一存在的结点(我们的curBoy指针是要指向环形链表中的最后一个结点的,但是这个时候显然我们的链表中只有一个节点)
                first.setNext(first); //让first结点自己的next域指向自己,也就是自己和自己形成一个环
            }
            //对于不是第一个节点的情况
            curBoy.setNext(boy); //然curBoy指针指向的结点的next域指向boy(也就是准备添加的结点)
            curBoy = boy;  //完成curBoy的后移(因为curBoy的后面就是boy结点,所有我们直接使用curBoy指针执行boy结点就是完成了结点的后移操作)
            boy.setNext(first); //让boy结点的next域指向我们的单向环形链表中的第一个节点(也就是first指针指向的结点)
        }
    }

    //为了测试我们写的代码是否正确,我们写一个遍历此单向环形链表的方法来测试
    public void list(){
        //我们要遍历链表,那么肯定是要通过一个临时变量来遍历
        Boy temp = first;

        /*
        首先判断链表是否为空,如果链表为空则直接退出循环
         */
        if(temp == null){
            System.out.println("链表为空");
        }

        do{
            System.out.println(temp.getNo()+",");
            temp = temp.getNext();

        }while(temp != first);
    }
}

给出测试程序:

/**
     * 测试程序
     */
public static void main(String[] args) {
    CircleSingleLinkedList circleSingleLinkedList = new CircleSingleLinkedList();
    circleSingleLinkedList.addBoy(10);
    circleSingleLinkedList.list();
}

网站公告

今日签到

点亮在社区的每一天
去签到