开发者社区> 问答> 正文

可以介绍一下创建链表类,或者其中的一些基本操作方法吗?

已解决

可以介绍一下创建链表类,或者其中的一些基本操作方法吗?

展开
收起
游客ihzapojsw2ysk 2022-04-03 09:20:28 752 0
1 条回答
写回答
取消 提交回答
  • 推荐回答
    	//初始化头节点,头节点不动
    	private HeroNode head = new HeroNode(0, "", "");
    	
    	//返回头节点,方便后续操作
    	public HeroNode getHead() {
    		return head;
    	}
    	//添加节点内到单向链表
    	//思路,当不考虑编号顺序,找到当前链表的最后节点,将最后节点的next指向新节点
    	public void add(HeroNode heroNode) {
    		HeroNode temp = head;
    		//遍历链表,找到最后
    		while(true) {
    			if(temp.next == null) {
    				break;
    			}
    			//如果没有找到,将temp后移
    			temp = temp.next;
    		}
    		temp.next = heroNode;
    	}
            //按照顺序添加
    	public void addByOrder(HeroNode heroNode) {
    		//头节点不能动,通过辅助指针
    		//单链表,因此temp在添加位置的前一个结点
    		HeroNode temp = head;
    		boolean 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;		
    			}
    			temp = temp.next;
    		}
    		if(flag) {
    			System.out.printf("编号%d存在", heroNode.no);
    		}else {
    			heroNode.next = temp.next;
    			temp.next = heroNode;
    		}
    		
    	}
            //更新链表,在找到序号的情况下进行更新
    	public void update(HeroNode newHeroNode) {
    		//根据no修改
    		if(head.next == null) {
    			System.out.println("链表为空");
    			return;
    		}
    		HeroNode temp = head.next;
    		boolean flag = false;
    		while(true) {
    			if(temp == null) {
    				break;
    			}
    			if(temp.no == newHeroNode.no) {
    				flag = true;
    				break;
    			}
    			temp = temp.next;
    		}
    		if(flag) {
    			temp.name = newHeroNode.name;
    			temp.nickname = newHeroNode.nickname;
    		}else {
    			System.out.printf("没找编号%d的值", newHeroNode.no);
    		}
    	}
    	//删除节点
    	//head不动,找到被删除节点的前一个
    	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.printf("要删除的节点%d不存在", no);
    		}
    	}	
    	
    }
    
    2022-04-03 10:53:11
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
对象的生命期管理 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载