【数据结构与算法 3(1),不服不行

@Override

public String toString() {

	return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname+"]";

}

}




### 增删改查



package com.atguigu.linkedlist;

public class SingleLinkedList {

//先初始化一个头节点,头节点不要动,不存放具体数据

private HeroNode head = new HeroNode(0, "", "");

//添加节点到单向链表

//思路,当不考虑编号顺序时

//1、找到当前链表的最后节点

//2、将最后节点的next域指向新的节点

public void add(HeroNode heroNode) {

	//因为head节点不能动,因此我们需要一个辅助变量

	HeroNode temp = head;

	//遍历链表,找到最后

	while(true) {

		//找到链表的最后了

		if(temp.next == null) {

			break;

		}

		//如果没找到,就将temp后移

		temp = temp.next;

	}

	//当退出while循环时temp就指向了链表的最后

	temp.next = heroNode;

}



//第二种添加英雄方法,根据排名插入指定位置

//如果排名存在,则添加失败,并给出提示

public void addByOrder(HeroNode heroNode) {

	//因为头节点不能动,我们仍然通过辅助变量来找到添加的位置

	//因为是单链表,因此我们找的temp是位于添加位置的前一个节点,否者加入失败

	HeroNode temp = head;

	boolean flag = false;//标识添加的编号是否存在,默认为false

	while(true) {

		//说明temp在链表最后

		if(temp.next == null) {

			System.out.println("在链表最后");

			break;

		}

		//位置找到,就在temp的后面插入

		if(temp.next.no > heroNode.no) {

			break;

		}

		//说明编号已经存在

		if(temp.next.no == heroNode.no) {

			flag = true;

			break;

		}

		//后移,遍历当前链表

		temp = temp.next;

	}

	//判断flag的值

	if(flag) {//不能添加,说明编号存在

		System.out.printf("插入英雄的编号%d已经存在,插入失败",heroNode.no);

	}else {

		//插入到链表中,temp的后面

		heroNode.next = temp.next;

		temp.next = heroNode;

	}

}



//修改节点的信息,根据编号no来修改,no不能修改

//根据新节点的编号来修改

public void update(HeroNode newHeroNode) {

	//判断是否为空

	if(head.next == null) {

		System.out.println("链表为空");

		return;

	}

	//找到需要修改的节点,根据no编号

	//定义一个辅助变量

	HeroNode temp = head.next;

	boolean flag = false;//表示是否找到该节点

	while(true) {

		if(temp == null) {

			//表示链表已经遍历结束

			break;

		}

		if(temp.no == newHeroNode.no) {

			flag = true;

			break;

		}

		temp = temp.next;

	}

	//根据flag判断是否找到要修改的节点

	if(flag) {

		temp.name = newHeroNode.name;

		temp.nickname = newHeroNode.nickname;

	}else {

		System.out.printf("没找到编号%d的节点,不能修改\n",temp);

	}

}



//删除节点

//思路

//1、head节点不能动,因此我们需要一个temp辅助节点,找到待删除节点的前一个节点

//2、说明我们在比较时,是让temp.next.no和需要删除的节点的no进行比较

public void del(int no) {

	HeroNode temp = head;

	boolean flag = false;//表示是否找到待删除节点的前一个节点

	while(true) {

		if(temp.next == null) {

			System.out.println("已经遍历到最后了");

			break;

		}

		if(temp.next.no == no) {

			//找到了待删除节点的前一个节点temp

			flag = true;

			break;

		}

		temp = temp.next;//temp后移,才能实现遍历

	}

	if(flag){

		temp.next = temp.next.next;

	}else {

		System.out.printf("要删除的节点%d不存在无法删除",no);

	}

}



//显示链表,通过遍历

public void list() {

	//先判断链表是否为空

	if(head.next == null) {

		System.out.println("链表为空");

		return;

	}

	//因为头节点不能动,因此需要一个辅助变量来遍历

	HeroNode temp  = head.next;

	while(true) {

		//判断是否到链表最后

		if(temp == null) {

			break;

		}

		//输出节点的信息

		System.out.println(temp);

		//将next后移,一定小心,不然是死循环

		temp = temp.next;

	}

}

}




###  测试类



package com.atguigu.linkedlist;

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.add(hero1);

// singleLinkedList.add(hero4);

// singleLinkedList.add(hero3);

// singleLinkedList.add(hero2);

	//按照编号加入

	singleLinkedList.addByOrder(hero1);

	singleLinkedList.addByOrder(hero4);

	singleLinkedList.addByOrder(hero3);

	singleLinkedList.addByOrder(hero2);

	singleLinkedList.list();

	//测试修改节点的代码

	HeroNode newHeroNode = new HeroNode(2,"小卢","*玉麒麟*");

	singleLinkedList.update(newHeroNode);

	System.out.println("修改之后的链表:");

	singleLinkedList.list();

	

	//删除一个节点

	System.out.println("删除一个节点:");

	singleLinkedList.del(1);

	singleLinkedList.del(2);

	singleLinkedList.del(3);

	singleLinkedList.del(4);

	singleLinkedList.list();

}

}




**六、控制台输出**

-----------



![](https://img-blog.csdnimg.cn/20200513133423529.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh,size_16,color_FFFFFF,t_70)


### 最后

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。

**更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务**

![](https://img-blog.csdnimg.cn/img_convert/1ef5ed9548db2f8cacbb2080039b4e03.png)

![](https://img-blog.csdnimg.cn/img_convert/8bd6185497548a558704104b9ff27e7e.png)

![](https://img-blog.csdnimg.cn/img_convert/e1d5708ac11704d9b2c382534f6fe623.png)

![](https://img-blog.csdnimg.cn/img_convert/d38679c28e1b0d067f4b3b555471bdd8.png)

FFF,t_70)


### 最后

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。

**更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务**

[外链图片转存中...(img-tO6U17GA-1630668397509)]

[外链图片转存中...(img-WHzyg9HF-1630668397510)]

[外链图片转存中...(img-E5rpYhER-1630668397512)]

[外链图片转存中...(img-bXWVdehD-1630668397513)]

**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值