按照编号顺序添加链表

在添加节点的时候,想依据排名将英雄插入到指定的位置{意思是:现在链表里有排名第一,第四,第八的英雄,这个时候来了一个排名第三的英雄,想将NO.3英雄插到指定的顺序位置},而不是直接就在链表末尾就加上节点。
实现的代码:倒序插入,顺序输出
按照编号顺序添加链表_第1张图片
核心代码:注释很重要,清楚表明了思路以及很多的细节,专门换了个BASH的代码块,让注释更清晰。
按照编号顺序添加链表_第2张图片

这个方法是以flag的值为参考的

// 按顺序添加
	public void addByOrder(HeroNode heroNode) {
		// 因为head头节点不能动,我们需要一个辅助变量temp找到添加的位置
		// 因为是单链表,我们找的节点应该是添加位置之前的节点,否则添加不进去,比如在2,4中要插入3这个节点,那么temp找的就是2这个节点
		// 插入操作:把2的next给heronode的next,这时的插入节点heronode的next指向4,再把2的next指向插入节点heronode就可以了
		HeroNode temp = head;
		boolean flag = false;// flag标识添加的编号是否存在,默认为false
		while (true) {
			if (temp.next == null) {
				break;
			}
			if (temp.next.no > heroNode.no) {// 找到位置了!!!!!就在temp后面插入该节点就可

				break;
				/*
				 * heroNode.next = temp.next; heroNode = temp.next;
				 */
			} else if (temp.next.no == heroNode.no) {
				flag = true;// 说明编号存在
				break;
				// System.out.println("这个位置已经有数据了,添加失败!!");
			}
			temp = temp.next;
		} // 遍历完成之后通过判断flag的值来插入
		
		if (flag == true) {
			System.out.println("准备插入的英雄编号%d已经存在了,添加失败!!" + heroNode.no);
		} else {
			// 插入到链表中,temp的后边
			// 个人理解:先将上一个的next指针转移给heronode,这个时候heronode指针指向下一个节点,理解temp其实就是链表的一个节点了,不是虚构的
			// 然后将heronode的上一个节点的next修改,注意这里是修改,于是将heronode的地址给temp的next,注意这里等号前后数据是不能交换的
			heroNode.next = temp.next;
			temp.next = heroNode;
		}

	}

你可能感兴趣的:(按照编号顺序添加链表)