相声讲究说学逗唱链表讲究增删改查

上一篇blog里演示了单链表的增加节点的操作,下面演示单链表的删除、修改和查找的操作。

修改操作:
思路:

  1. 遍历找到待修改节点
  2. 这里编号no不改变,把称号和姓名重新赋值
public class SingleLinkedListDemo {public static void main(String[] args) {// TODO Auto-generated method stub 第一阶段测试代码// 创建节点HeroNode hero1 = new HeroNode(1, "呼保义", "宋江");HeroNode hero2 = new HeroNode(2, "玉麒麟", "卢俊义");HeroNode hero3 = new HeroNode(3, "智多星", "吴用");HeroNode hero4 = new HeroNode(4, "入云龙", "公孙胜");HeroNode hero5 = new HeroNode(5, "大刀", "关胜");// 创建单链表SingleLinkedList singleLinkedList = new SingleLinkedList();// 加入操作//       singleLinkedList.add(hero1);
//
//      singleLinkedList.add(hero2);
//
//      singleLinkedList.add(hero3);
//
//      singleLinkedList.add(hero4);
//
//      singleLinkedList.add(hero5);singleLinkedList.addByOrder(hero1);singleLinkedList.addByOrder(hero2);singleLinkedList.addByOrder(hero4);singleLinkedList.addByOrder(hero3);singleLinkedList.addByOrder(hero5);// 显示System.out.println("修改前:");singleLinkedList.list();HeroNode newHeroNode=new HeroNode(5, "写轮眼", "卡卡西");singleLinkedList.update(newHeroNode);System.out.println("修改后:");singleLinkedList.list();}}//定义一个SingleLinkedList(单链表),管理英雄
class SingleLinkedList {// 一开始要初始化一个头节点,保持不动否则会找不到剩下的节点,***不存放具体数据private HeroNode head = new HeroNode(0, "", "");// no初始化为0,姓名和称号也不写// 添加节点到单向链表// 当不考虑编号顺序时:// 把节点添加进去的操作是首先找到当前链表的最后一个节点,next域原本是NULL,要把next域指向新添的节点public void add(HeroNode heroNode) {// 由于头节点不能动,所以需要辅助变量HeroNode temp = head;// temp是辅助变量一开始指向头节点,因为单向链表不是顺序存储,所以每一次找最后一个节点都需要遍历整个链表// 开始遍历while (true) {// 死循环if (temp.next == null) {// 找到链表的尾节点了break;}// 如果当前节点不是末节点// temp后移一位temp = temp.next;// 要清楚temp是一个移动辅助变量,每遍历到一个不是尾节点的点temp就会指向当前节点的下一个节点}// 当退出这个死循环的时候,temp就指向了单链表的尾节点// 这个时候就可以把尾节点的next域指向传入的新节点,这个新传入的节点就连上了temp.next = heroNode;}// 按照顺序显示出来// 如果已经有这个编号,则添加失败并给出提示public void addByOrder(HeroNode heroNode) {// heroNode为传入的新节点// 由于头节点不能动,所以需要辅助变量// 单链表要添加节点,temp一定是指向要插入位置的前一个节点,然后temp.next就指向新节点,这样第一步就完成了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;// 说明已经有了break;} else {temp = temp.next;// 如果上述情况都不符合的话,那么继续遍历找下一个节点}}// 退出循环的时候要看flag的值if (flag) {System.out.printf("已有编号%d,添加失败~~~\n", heroNode.no);} else {// 可以插入到链表中,temp后移heroNode.next = temp.next;// 新节点的next域指向下一个节点temp.next = heroNode;// 前一个节点的next域指向新节点}}//修改节点的信息//根据编号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;}else if(temp.no==newHeroNode.no) {//表示已经找到要删除的节点flag=true;break;}temp=temp.next;}//退出循环以后,根据flag的值来判断if(flag) {//flag=true;表示找到了要修改的点temp.name=newHeroNode.name;temp.nickname=newHeroNode.nickname;}//还有一种情况就是没有找到要修改的点else {System.out.println();System.out.printf("没有找到编号为%d 的好汉,不能删除												

单链表删除、修改和查找相关推荐

  1. 【小白学算法】6.单链表的修改、删除

    接着上一章继续来看单链表. 之前对单链表进行了遍历.插入的操作,本章继续用代码来实现修改以及删除. 一.单链表的修改 免费优惠券 m.cps3.cn 修改结点信息首先需要先找到对应的结点,接着上一章的 ...

  2. 单链表折半查找c语言,为什么有序的单链表不能进行折半查找

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:为什么有序的单链表不能进行折半查找 问题详情:急!!!!拜托高手解答 等级低 分数不高 请帮帮忙 谢谢了回答:这是由链表的特决定的. ...

  3. 单链表删除整表_单链表删除

    单链表删除整表 Deletion can be at various positions like: 删除可以在各个位置进行,例如: Deleting the first node 删除第一个节点 D ...

  4. 单链表删除所有值为x的元素_双链表的基本实现与讲解(C++描述)

    双链表 双链表的意义 单链表相对于顺序表,确实在某些场景下解决了一些重要的问题,例如在需要插入或者删除大量元素的时候,它并不需要像顺序表一样移动很多元素,只需要修改指针的指向就可以了,其时间复杂度为 ...

  5. 单链表删除所有值为x的元素_C/C++编程笔记:如何使用C++实现单链表?单链表的基本定义...

    如何弥补顺序表的不足之处? 第一次学习线性表一定会马上接触到一种叫做顺序表(顺序存储结构),经过上一篇的分析顺序表的优缺点是很显然的,它虽然能够很快的访问读取元素,但是在解决如插入和删除等操作的时候, ...

  6. 单链表删除所有值为x的元素_线性表之单链表

    单链表 一种以链接方式存储的线性表,适用于频繁增删操作,存储空间不定的情形. 单链表的一个存储结点包含两个域,数据域和指针域.数据域用于存储线性表的一个数据元素,指针域用于指示下一个结点开始的存储地址 ...

  7. 单链表删除节点(p->next)与p的区别

    在插入链表的时候,while§而在删除链表的时候while(p->next)?这是为什么呢?因为删除算法中的循环条件(p->next && j<i-1)和插入算法中的 ...

  8. 单链表-删除重复节点(递增链表)

    单链表的存储结构: typedef struct LinkList{int data;LinkList * next;} 分析: 这里删除重复节点,分两种情况: 1.第一种是链表本身递增的 2.第二种 ...

  9. 单链表-删除单链表L中奇数号节点(双指针法)

    题意: 有一个带头节点的单链表L,设计一个算法,删除其中第1,3,5,7号-节点,即删除奇数号的节点. 单链表的存储结构: typedef struct LinkList{int data;LinkL ...

最新文章

  1. python学习19--生成器
  2. String,StringBuffer与StringBuilder
  3. android开发出现的错误,android 开发 错误集锦
  4. matlab画gds图,如何将图片转换为.gds文件?(转)
  5. SpringCloud学习笔记014---可以使用json对rabbitmq进行封装,方便数据传输
  6. 快速接入阿里云应用配置管理工具 轻松开启企业效率新时代
  7. Hinton胶囊网络代码正式开源,5天GitHub fork超1.4万
  8. 黑苹果无线网卡的另一种解决方案
  9. 计算机考研用python_计算机考研408 130+个人攻略
  10. 天邑ty1208z海思3798刷版本_[乐天固件]魔百和M301H-当贝版卡刷包-海思3798M
  11. spark入门demo
  12. (一)安装Emacs
  13. 华为服务器信息失败,服务器远程信息失败
  14. 在线笔试神器~福利哟
  15. 业绩下滑、利润缩水,除了一直涨价,涪陵榨菜还有什么招数?
  16. notify()和notifyAll()有什么区别
  17. 概率论总结(3)——高斯分布(正太分布)
  18. 数据库的目录IDF打不开!附加失败
  19. 企业级音视频会议实战之webrtc服务器janus品尝实战
  20. 《C++详解》(二)初入C++最重要的知识点:引用 操作符

热门文章

  1. mysql外键_mysql系列之存储引擎
  2. oracle开窗函数是什么,ORACLE数据库(六)-----开窗函数
  3. 如何操控输入框中的placeholder属性
  4. 前端跨域请求get_前端跨域请求jsonp实现
  5. android开发之EditText默认hint字体大小
  6. Linux-- 查看文件 more与其它
  7. 杭州人有福了!菜鸟配送升级新增24小时送药服务
  8. MyGeneration学习笔记(5) :在Web Service中使用dOOdad(中)
  9. ​iIIegalArgumentException:the bind value at index 1 isnull
  10. Repeater在无数据记录时显示“无相关记录...”