目录
1.单链表的修改
思路分析:
1.先找到该节点,通过遍历
2.temp.name=newHeroNode.name;
3.temp.nickname=newHeroNode,nickname;
建立一个新的节点,通过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",newHeroNode.no);
}
} 作者:袗亦 https://www.bilibili.com/read/cv16266791 出处:bilibili
单链表的修改,代码实现:
public class ArrayList {
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(hero2);
// singleLinkedList.add(hero3);
// singleLinkedList.add(hero4);
// singleLinkedList.list();
singleLinkedList.addByOrder(hero3);
singleLinkedList.addByOrder(hero1);
singleLinkedList.addByOrder(hero2);
singleLinkedList.addByOrder(hero4);
singleLinkedList.list();
//测试修改节点
HeroNode newheronode=new HeroNode(2,"小如","666");
singleLinkedList.update(newheronode);
System.out.println("修改后节点");
singleLinkedList.list();
}
}
class SingleLinkedList {
private HeroNode head = new HeroNode(0, "", "");
public void add(HeroNode heroNode){//节点的遍历
//因为头结点不能动,所以需要一个辅助遍历temp
HeroNode temp=head;
//遍历链表,找到最后
while (true){
//找到链表的最后
if (temp.next == null){
break;
}
//如果没有找到最后,就将temp后移
temp=temp.next;
}
//当退出循环时,temp就指向了链表的最后,将最后这个节点的next指向新的节点
temp.next=heroNode;
}
public void addByOrder(HeroNode heroNode){//添加节点到数组
HeroNode temp=head;
boolean flag=false;//flag表示添加的编号是否存在
while (true){
if (temp.next == null){//说明在链表的最后
break;
}
//这个
if (temp.next.no > heroNode.no){
break;
}else if (temp.next.no == heroNode.no){
//说明希望添加的heronode编号已经存在
flag=true;//说明编号存在
break;
}
temp=temp.next;//后移,遍历当前链表
}
if (flag){
System.out.printf("准备插入的英雄的编号%d已经存在了,不能加入\n",heroNode.no);
}else{
//插入到链表中,temp的后面
heroNode.next=temp.next;
temp.next=heroNode;
}
}
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",newHeroNode.no);
}
}
public void list(){//显示链表,遍历
if(head.next == null){
System.out.println("链表为空");
return;
}
//因为头结点不能动,所以需要一个辅助遍历temp
HeroNode temp=head.next;
while (true){
if (temp == null){
break;
}
//输出节点的信息
System.out.println(temp);
temp=temp.next;
}
}
}
class HeroNode{
public int no;//public是公有访问
public String name;
public String nickname;
public HeroNode next;//指向下一个节点,这个是heronode类的定义,他的定义是什么呢
public HeroNode(int no,String name,String nickname){//构造器,负责初始化实例变量,就是对变量初始化,上面只是对对象开辟内存,等构造器来初始化这个内存
this.no=no;//this是调用本类中的属性(成员变量)或者方法,将局部变量的值传递给成员变量
this.name=name;
this.nickname=nickname;
}
//为了显示方法,我们重写tostring
public String toString(){
//这里的no=不加双引号是因为直接输出,加了双引号的为变量,如果不加++,就为字符串,加了就为变量
return "HeroNode[no="+no+",name="+name+",nickname="+nickname+"]";
}
}
2.单链表的删除
思路分析:
1.找到需要删除这个节点的第一个节点temp
2.temp.next=temp.next.next
3.被删除的节点,将不会有其它引用指向
主要代码:
public void del(int no){//删除节点
HeroNode temp=head;
boolean flag=false;
while (true){
if (temp.next == null){
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("要删除的节点不存在\n",no);
}
}
作者:袗亦 https://www.bilibili.com/read/cv16266791 出处:bilibili
单链表的删除,代码实现:
public class ArrayList {
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(hero2);
// singleLinkedList.add(hero3);
// singleLinkedList.add(hero4);
// singleLinkedList.list();
singleLinkedList.addByOrder(hero3);
singleLinkedList.addByOrder(hero1);
singleLinkedList.addByOrder(hero2);
singleLinkedList.addByOrder(hero4);
singleLinkedList.list();
//测试修改节点
HeroNode newheronode=new HeroNode(2,"小如","666");
singleLinkedList.update(newheronode);
System.out.println("修改后节点");
singleLinkedList.list();
singleLinkedList.del(2);
System.out.println("删除后链表的状况~~");
singleLinkedList.list();
}
}
class SingleLinkedList {
private HeroNode head = new HeroNode(0, "", "");
public void add(HeroNode heroNode){//节点的遍历
//因为头结点不能动,所以需要一个辅助遍历temp
HeroNode temp=head;
//遍历链表,找到最后
while (true){
//找到链表的最后
if (temp.next == null){
break;
}
//如果没有找到最后,就将temp后移
temp=temp.next;
}
//当退出循环时,temp就指向了链表的最后,将最后这个节点的next指向新的节点
temp.next=heroNode;
}
public void addByOrder(HeroNode heroNode){//添加节点到数组
HeroNode temp=head;
boolean flag=false;//flag表示添加的编号是否存在
while (true){
if (temp.next == null){//说明在链表的最后
break;
}
//这个
if (temp.next.no > heroNode.no){
break;
}else if (temp.next.no == heroNode.no){
//说明希望添加的heronode编号已经存在
flag=true;//说明编号存在
break;
}
temp=temp.next;//后移,遍历当前链表
}
if (flag){
System.out.printf("准备插入的英雄的编号%d已经存在了,不能加入\n",heroNode.no);
}else{
//插入到链表中,temp的后面
heroNode.next=temp.next;
temp.next=heroNode;
}
}
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",newHeroNode.no);
}
}
public void del(int no){//删除节点
HeroNode temp=head;
boolean flag=false;
while (true){
if (temp.next == null){
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("要删除的节点不存在\n",no);
}
}
public void list(){//显示链表,遍历
if(head.next == null){
System.out.println("链表为空");
return;
}
//因为头结点不能动,所以需要一个辅助遍历temp
HeroNode temp=head.next;
while (true){
if (temp == null){
break;
}
//输出节点的信息
System.out.println(temp);
temp=temp.next;
}
}
}
class HeroNode{
public int no;//public是公有访问
public String name;
public String nickname;
public HeroNode next;//指向下一个节点,这个是heronode类的定义,他的定义是什么呢
public HeroNode(int no,String name,String nickname){//构造器,负责初始化实例变量,就是对变量初始化,上面只是对对象开辟内存,等构造器来初始化这个内存
this.no=no;//this是调用本类中的属性(成员变量)或者方法,将局部变量的值传递给成员变量
this.name=name;
this.nickname=nickname;
}
//为了显示方法,我们重写tostring
public String toString(){
//这里的no=不加双引号是因为直接输出,加了双引号的为变量,如果不加++,就为字符串,加了就为变量
return "HeroNode[no="+no+",name="+name+",nickname="+nickname+"]";
}
}
如果对您有帮助,点个关注吧,持续更新中,谢谢支持。如果有问题或错误,欢迎指出与我联系,谢谢。