简单链表的删除与修改

简单链表的删除与修改

/**
 * 单向链表
 * 链表由一系列节点组成,这些节点不必在内存中相连。
 * 每个节点都含有表元素和到包含该元素后继元的节点的链,即next链(next 为链表的对象)。
 * 最后一个单元的next链引用null.。
 * 
 * @author Rocco_L
 *
 */
/*
 * 链表的修改删除功能
 * 
 * 修改节点功能思路:
 * 1.先找到该节点(通过遍历)
 * 2.通过辅助变量来修改内容
 * 
 * 删除节点功能思路:
 *  1. 通过辅助节点找到需要删除的这个节点前一个节点
 *  2.temp.next = temp.next.next
 *  3.被删除的节点,将不会由其他引用指向,被垃圾回收机制回收
 */
//定义链表,管理参数
class LinkedList3{
 //先初始化一个头节点 , 头节点不动
 private HeroNode3 head =new HeroNode3(0," "," ");
 
 //添加节点到单向链表
 //思路//不考虑编号顺序
 //1.找到当前链表的最后一个节点
 //2,将最后这个节点的next指向新的节点
 public void add(HeroNode3 heroNode3){
  //创建辅助节点用于遍历
  HeroNode3 temp = head;
  while(true){
   //找到链表最后
   if(temp.next == null){
    break;
   }
   //如果没有找到最后,就将temp后移
   temp = temp.next;
  }
  //当退出while循环时,temp就指向了链表的最后
  //将最后这个节点的next指向新的节点
  temp.next =heroNode3;
  
 }
 
 /*
  * 第二种方式添加英雄,根据排名将英雄插入到指定位置
  */
 public void addByOrder(HeroNode3 heroNode3){
  //因为头节点不能动,通过辅助变量来找到添加的位置
  //因为是单链表,所以我们找的temp 是位于添加位置的前一个节点
  HeroNode3 temp =head;
  boolean flag =false;
  while (true){
   if (temp.next == null){
    break;
   }
   if(temp.next.no > heroNode3.no){
    break;
   }else if (temp.next.no ==heroNode3.no){
    flag = true;
    break;
   }
   temp = temp.next;
  }
  
  if(flag){
   System.out.printf("编号%d已经存在\n", heroNode3.no);
  }else{
  
   heroNode3.next = temp.next;
   temp.next = heroNode3;
  }
   
 }
 
//修改节点信息
// * 1.先找到该节点(通过遍历)
//  * 2.通过辅助变量来修改内容
 public void update (HeroNode3 newheroNode3){
  
  if(head.next == null){
   System.out.println("链表为空");
   return;
  }
  
  HeroNode3 temp = head.next;
  boolean flag = false;
  while (true){
   if(temp == null){
    break;
   }
   
   if(temp.no == newheroNode3.no){
    flag = true;
    break;
   }
   temp = temp.next;
  }
 
  if(flag){
   temp.name = newheroNode3.name;
   temp.nickname =newheroNode3.nickname; 
  }else{
   System.out.printf("没有找到 编号为/5d的节点 , 不能修改", newheroNode3.no);
  }
  
 }
//删除节点
 //思路
//  *  1. 通过辅助节点找到需要删除的这个节点前一个节点
//  *  2.temp.next = temp.next.next
//  *  3.被删除的节点,将不会由其他引用指向,被垃圾回收机制回收
public void delete(int no){
  
  HeroNode3 temp = head;
  boolean flag = false;
  
  while(true){
   if(temp.next == null){
//    System.out.println("链表已经到最后");
    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);
   }
  
 }

//显示链表
 public void list(){
  if(head.next == null){
   System.out.println("链表为空");
   return ;
  }
  HeroNode3 temp = head.next;
  while (true){
   if(temp == null){
    break;
   }
   //输出节点的信息
   System.out.println(temp);
   temp = temp.next;
   
  }
  
 }
 
}
//创建节点
class HeroNode3{
 public int no;
 public String name ;
 public String nickname ;
 public HeroNode3 next ;    //每个HeroNode对象就是下一个节点
 
 public HeroNode3(int no, String name, String nickname) {
  this.no = no;
  this.name = name;
  this.nickname = nickname;
 }
public String toString() {
  return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";
 }
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值