5.单向环形链表

单向环形链表就是将单向链表的最后一个节点的next指向第一个节点,从而构成一个环状链表

在这里插入图片描述
如何构建一个单项环形链表?

1.先创建一个first节点(这个节点作为一个头部标识),再创建第一个元素节点,让first指向该节点,并使该节点的next指向first形成一个环。
2.后面每遍历一个新的节点,就将原链表的最后一个元素节点的next指向新节点,而新节点的next指向first。

首先需要创建一个节点类:

//创建一个节点类,每一个节点对象就是一个节点
class CircleNode{
    private int no; //编号
    private CircleNode next; //指向下一个节点
    public CircleNode(int no){
        this.no = no;
    }
    public int getNo() {
        return no;
    }
    public void setNo(int no) {
        this.no = no;
    }
    public CircleNode getNext() {
        return next;
    }
    public void setNext(CircleNode next) {
        this.next = next;
    }
}

创建一个环形链表类:

//创建一个环形的单向链表
class CircleSingleLinkedList{
	//创建第一个节点,
	private CircleNode first = new CircleNode(-1);
}

添加节点:

添加节点注意区分情况,要判断添加的是否是链表的第一个节点,如果是第一个节点,就需要自身构成环状。

//添加节点的方法
public void add(CircleNode node){
    CircleNode cur = first;  //辅助节点,方便我们遍历环形链表
    //第一个节点要自身形成环状
    if (first.getNext() == null){	//为true说明该链表没有节点
        first = node;		//使first指向第一个节点
        first.setNext(first);   //构成环
        return;
    }
    //后面每创建一个新的节点,就把该节点加到已有的环型链表中即可
    while (true) {
        //如果这个节点的下一个节点为first,说明这是最后一个节点,我们就在环形链表尾部添加一个节点
        if (cur.getNext() == first) {
            cur.setNext(node);      //将最后这个节点指向新插入进来的节点
            node.setNext(first);    //将新节点的next指向first
            break;
        }
        cur = cur.getNext();
    }
}

遍历节点:

//遍历环形链表
public void getList(){
    if (first.getNext() == null){
        System.out.println("链表空!");
        return;
    }
    CircleNode cur = first;
    while (true){
        System.out.println(cur.getNo());
        //如果这个节点的下一个节点为first,说明这是最后一个节点
        if (cur.getNext() == first){
            break;
        }
        cur = cur.getNext();
    }
}

测试代码:

public static void main(String[] args) {
 	CircleSingleLinkedList list = new CircleSingleLinkedList();
    for (int i = 0; i < 10; i++) {
        int count = new Random().nextInt(10);
        System.out.println("添加第"+(i+1)+"个值:"+count);
        list.add(new CircleNode(count));
    }
    System.out.println("环形链表展示:");
    list.getList();
}

运行结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值