Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
521 views
in Technique[技术] by (71.8m points)

请问这段代码为什么运行没有结果啊?(没有产生异常或者错误)

package com.lipan.exercise;

public class SingleLinkedListDemo {
    public static void main(String[] args) {
        HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
        HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
        HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
        HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");

        SingleLinkedList singleLinkedList = new SingleLinkedList();
        singleLinkedList.addByOrder(hero1);
        singleLinkedList.addByOrder(hero4);
        singleLinkedList.addByOrder(hero2);
        singleLinkedList.addByOrder(hero3);
        singleLinkedList.list();
    }

}

class SingleLinkedList {
    // 初始化一个头结点
    private HeroNode head = new HeroNode(0, "", "");

    // 添加节点到单相链表
    public void add(HeroNode heroNode) {
        // 需要一个辅助变量temp
        HeroNode temp = head;
        // 遍历链表,找到链表的最后
        while (true) {
            if (temp.next == null) {
                break;// 找到了链表最后一个节点temp
            }
            // 后移temp
            temp = temp.next;
        }
        // 退出while循环的时候,temp已经指向了链表的末尾。
        // 将temp.next指向新加入的节点
        temp.next = heroNode;
    }

    // 按编号顺序添加节点的方法
    public void addByOrder(HeroNode heroNode) {
        HeroNode temp = head;
        boolean flag = false;//flag标志添加的编号是否已经存在,默认为false
        while(true) {
            if(temp.next == null) {
                break;
            }
            if(temp.next.no > heroNode.no) {
                break;//找到了该插入的位置
            }else if(temp.next.no == heroNode.no ) {
                flag = true;
                //说明该节点已经存在
                break;
            }
        }
        if(flag) {
            System.out.printf("该编号%d已经存在
",heroNode.no);            
        }else {
            //将节点插入链表
            heroNode.next = temp.next;
            temp.next = heroNode;
            
        }
    }

    // 根据编号修改节点的信息
    public void update(HeroNode heroNode) {
        // 判断是否为空
        if (head.next == null) {
            System.out.println("链表为空");
            return;
        }
        // 遍历
        HeroNode temp = head.next;
        boolean flag = false;// 表示是否找到该节点
        while (true) {
            if (temp.next == null) {
                break;
            }
            if (temp.no == heroNode.no) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        // 根据flag来判断要修改的节点
        if (flag) {
            temp.name = heroNode.name;
            temp.nickname = heroNode.nickname;
        } else {
            System.out.println("没有找到该节点");
        }

    }

    // 删除节点
    public void del(int no) {
        HeroNode temp = head;
        boolean flag = false;
        // 遍历,找到该节点
        while (true) {
            if (temp.next == null) {
                break;
            }
            if (temp.next.no == no) {
                flag = true;
                // 找到了该节点
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            temp.next = temp.next.next;
        } else {
            System.out.println("要删除的节点不存在");
        }
    }

    // 遍历单链表
    public void list() {
        // 判断链表是否为空
        if (head.next == null) {
            System.out.println("链表为空");
            return;
        }
        HeroNode temp = head.next;
        while (true) {
            // 判断是否已到链表最后
            if (temp == null) {// 注意,此处不能是temp.next,否则不能打印出最后一个节点
                break;
            }
            // 打印输出节点
            System.out.println(temp.toString());
            temp = temp.next;
        }
    }
}

class HeroNode {
    public int no;
    public String name;
    public String nickname;
    public HeroNode next;// 指向下一节点
    // 构造器

    public HeroNode(int no, String name, String nickname) {
        this.no = no;
        this.name = name;
        this.nickname = nickname;

    }

    // 重写toString
    @Override
    public String toString() {
        return "HeroNode [no=" + this.no + ",name=" + this.name + ",nickname" + this.nickname + "]";

    }

}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

image.png如果小于,那就死循环了


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...