链表的删除与修改及附录完整的增删改查源代码

数据结构链表 链表的删除 思路分析:

从单链表中删除一个节点的思路: 1.我们先要找到,要删除的这个节点的前一个节点的temp。 2. temp.next=temp.next.next 3. 被删除的节点,将不会有其他任何指向,会被垃圾回收机制回收

HerNode
//定义一个HerNode,每个HerNode对象就是一个节点 class HeroNode{public intno; publicStringname; publicString nickname; publicHeroNode next; //指向下一个节点 //构造器 public HeroNode(int no, String name, String nickname) { this.no = no; this.name = name; this.nickname = nickname; } //重写toStrong方法 @Override public String toString() { return "HerNode{" + "no=" + no + ", name='" + name + '\'' + ", nickname='" + nickname + '\'' + '}'; } }

del()
【链表的删除与修改及附录完整的增删改查源代码】删除实现代码
class SingleLinkedList{ //先初始化一个头节点,头节点不要动,不存放具体的数据 privateHeroNodehead =new HeroNode(0,"",""); //删除节点 //思路 //1.head节点不能动,因此我们需要一个temp辅助节点来找到要删除节点的前一个节点 //22. 说明我们在比较是,是temp.next.no和需要删除的节点的no比较 publicvoid 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的节点不存在\n",no); } } }

测试代码:
//删除 public class SingleLinkedListDemo { public static void main(String[] args) { HeroNode heroNode1 = new HeroNode(1, "宋江", "及时雨"); HeroNode heroNode2 = new HeroNode(2, "卢俊义", "玉麒麟"); HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星"); HeroNode heroNode4 = new HeroNode(4, "林冲", "豹子头"); //显示 singleLinkedList.list(); //删除 singleLinkedList.del(1); singleLinkedList.del(3); System.out.println("删除之后的结果..."); singleLinkedList.list(); }

链表的修改 update()
修改实现代码
class SingleLinkedList{ //先初始化一个头节点,头节点不要动,不存放具体的数据 privateHeroNodehead =new HeroNode(0,"",""); //修改节点信息,根据no编号来修改,即no编号不能改 //说明 //1.根据newHero的no来修改 public void update (HeroNode newHeroNode){ //判断是否为空 if(head.next==null){ System.out.println("链表为空~"); return; } //z找到需要修改的节点 根据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",newHeroNode.no ); }} }

测试代码:
public class SingleLinkedListDemo { public static void main(String[] args) { HeroNode heroNode1 = new HeroNode(1, "宋江", "及时雨"); HeroNode heroNode2 = new HeroNode(2, "卢俊义", "玉麒麟"); HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星"); HeroNode heroNode4 = new HeroNode(4, "林冲", "豹子头"); HeroNode heroNode5 = new HeroNode(4, "小范", "豹子头~"); //显示 singleLinkedList.list(); //修改 singleLinkedList.update(heroNode5); System.out.println("修改之后的结果..."); singleLinkedList.list(); }

附录(完整的链表代码增删改查)
package com.atg.linkedlist; public class SingleLinkedListDemo { public static void main(String[] args) { //测试 //先创建节点 HeroNode heroNode1 = new HeroNode(1, "宋江", "及时雨"); HeroNode heroNode2 = new HeroNode(2, "卢俊义", "玉麒麟"); HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星"); HeroNode heroNode4 = new HeroNode(4, "林冲", "豹子头"); HeroNode heroNode5 = new HeroNode(4, "小范", "豹子头~"); //创建一个链表 //加入 SingleLinkedList singleLinkedList = new SingleLinkedList(); //singleLinkedList.add(heroNode4); //singleLinkedList.add(heroNode1); //singleLinkedList.add(heroNode2); //singleLinkedList.add(heroNode3); System.out.println("链表展示详情..."); singleLinkedList.addByOrder(heroNode1); singleLinkedList.addByOrder(heroNode2); singleLinkedList.addByOrder(heroNode3); singleLinkedList.addByOrder(heroNode4); //显示 singleLinkedList.list(); System.out.println("修改之后的结果..."); singleLinkedList.update(heroNode5); singleLinkedList.list(); //删除singleLinkedList.del(1); singleLinkedList.del(3); System.out.println("修改之后的结果..."); singleLinkedList.list(); } } //定义SingleLinkedList,管理我们的英雄 class SingleLinkedList{ //先初始化一个头节点,头节点不要动,不存放具体的数据 privateHeroNodehead =new HeroNode(0,"",""); //添加节点到单向链表 //思路不考虑编号顺序 //1.找到当前链表的最后节点 //2.将最后节点的next指向新的节点 publicvoid add(HeroNode heroNode){ //因为head节点不能动因此我们需要借助temp来辅助遍历 HeroNode temp=head; //遍历链表找到最后 while (true){ //找到最后 if(temp.next==null){ break; } //如果没有找到最后将temp后移 temp=temp.next; } //当退出while循环是,temp就指向了链表的最后 //将最后这个节点的next,指向新的节点 temp.next=heroNode; } //显示链表[遍历] public void list(){ //判断链表是否为空 if(head.next==null){ System.out.println("链表为空"); return; } //因为head节点不能动因此我们需要借助temp来辅助遍历, //由经if语句可得执行此处链表必定有一个数 ,故 HeroNode temp=head.next; HeroNode temp=head.next; //遍历链表找到最后 while (true){ //找到最后 if(temp==null){ break; } //输出节点信息 System.out.println(temp); //如果没有找到最后将temp后移 temp=temp.next; // } }//第二种方式添加英雄时,根据排名插入到指定的位置 //如果有这个排名,则添加失败并给出提示 publicvoid addByOrder(HeroNode heroNode){ //因为头部节点不能动,因此我们需要通过一个辅助的指针(变量)来帮助我们添加的位置 //因为单链表,因为的我们的temp是位于添加位置的前一个节点,否则插入不了 HeroNode temp=head; boolean flag=false; //flag 标志添加的编号是否存在,默认为false while (true){ if (temp.next==null){ //说明temp已经在链表的最后 break; } if (temp.next.no>heroNode.no){ //位置找到,就在temp的后面插入 break; } else if (temp.next.no==heroNode.no){ //说明heroNode的编号已经存在 flag = true; break; } //后移遍历链表 temp=temp.next; } //判断flag if (flag){ //不能添加 heroNode的编号已经存在 System.out.printf("排名%d的英雄已存在,插入失败\n",heroNode.no); }else { //插入到链表中,temp的后面 heroNode.next=temp.next; temp.next=heroNode; } } //修改节点信息,根据no编号来修改,即no编号不能改 //说明 //1.根据newHero的no来修改 public void update (HeroNode newHeroNode){ //判断是否为空 if(head.next==null){ System.out.println("链表为空~"); return; } //z找到需要修改的节点 根据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",newHeroNode.no ); }} //删除节点 //思路 //1.head节点不能动,因此我们需要一个temp辅助节点来找到要删除节点的前一个节点 //22. 说明我们在比较是,是temp.next.no和需要删除的节点的no比较 publicvoid 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的节点不存在\n",no); } } } //定义一个HerNode,每个HerNode对象就是一个节点 class HeroNode{public intno; publicStringname; publicString nickname; publicHeroNode next; //指向下一个节点 //构造器 public HeroNode(int no, String name, String nickname) { this.no = no; this.name = name; this.nickname = nickname; } //重写toStrong方法 @Override public String toString() { return "HerNode{" + "no=" + no + ", name='" + name + '\'' + ", nickname='" + nickname + '\'' + '}'; } }

    推荐阅读