ZYa222999 2024-03-07 14:17 采纳率: 33.3%
浏览 2
已结题

java循环单链表问题

java已经学到了递归调用方法,现在刚刚开始学习java数据结构与算法不久~
今天学习循环单链表,不太能想到参考代码给出的思路,所以尝试按照自己的思路来敲代码,但是绕着绕着就不知道自己哪里出错了,请大家帮忙看看,谢谢~(顺便请问一下在写代码时自己思考得很绕是正常的吗?是不是因为自己java还没有学完,知识储备不够呀?)

package com.atzy.LinkedList;

public class CircleLinkedList {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //测试
        int n = 5;
        Circle list = new Circle();
        list.CreateCircle(n);
        list.show();
        
    }

}

class Circle{
    private Boy curBoy;
    private Boy first = new Boy(1);
    public void CreateCircle(int nums) {
        curBoy = first;
        for(int i = 2;i <= nums;i++) {
            Boy newboy = new Boy(i);
            
                
            curBoy.next = newboy;
            newboy.next = curBoy;
            
            curBoy = curBoy.next;
        }
        
    }
    public void show(){
        curBoy = first;
        while((curBoy.next).no != first.no) {
            System.out.println(curBoy.no);
            curBoy = curBoy.next;
        }
    }
}





//先创建一个Boy类
class Boy{
    public int no;
    public Boy next;
    public Boy(int no) {
        this.no = no;
    }
    @Override
    public String toString() {
        return "Boy [no=" + no + "]";
    }
}


  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-07 14:17
    关注

    引自免费微信小程序:皆我百晓生

    首先,让我们分析一下你的代码。你已经创建了一个表示循环单链表的类 Circle 和一个节点类 Boy。在 Circle 类中,你尝试通过 CreateCircle 方法构造一个包含特定数量节点(人数)的循环单链表,并通过 show 方法遍历并打印出链表中的所有节点。

    问题在于,在创建循环单链表时,每个新节点的 next 指针需要指向下一个新节点,最后一个节点的 next 指针应该指向头节点以形成循环。但在你的 CreateCircle 方法中,每添加一个新节点时都将其 next 指针指向了当前节点(newboy.next = curBoy;),而不是指向下一个新节点。此外,当循环到最后一轮时,实际上不需要再执行这一步赋值操作。

    修复这个问题的方法是只在创建最后一个节点时将其 next 指针指向头节点即可。以下是修正后的 CreateCircle 方法:

    public void CreateCircle(int nums) {
        curBoy = first;
        for (int i = 2; i <= nums; i++) {
            Boy newboy = new Boy(i);
            curBoy.next = newboy;
            
            if (i == nums) { // 当前节点是最后一个要插入的新节点
                newboy.next = first; // 最后一个节点的next指向头节点,形成循环
            } else {
                curBoy = newboy;
            }
        }
    }
    

    现在,这个修正后的 CreateCircle 方法可以正确地构造循环单链表了。对于你的另一个问题,“写代码时自己思考得很绕是正常的吗?”,答案是肯定的。尤其是在初次接触新的数据结构和算法时,经常会有不清晰或困惑的感觉。随着不断实践和学习更多知识,你会逐渐理解得更加深入,并能够更流畅地解决问题。所以,请不要担心,持续练习和积累经验是很重要的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 已采纳回答 3月7日
  • 创建了问题 3月7日

悬赏问题

  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 GPT写作提示指令词
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题