【目的】
实现单向链表的修改、删除操作
【代码实现】
链表的定义
//定义链表
class SingleLinkedList2{
//初始化一个头结点
private HeroNode head = new HeroNode(0,"" , "");
//添加结点
public void add(HeroNode heroNode) {
HeroNode temp=head;
while (temp.next!=null) {
//将节点插入到合适的位置
if (temp.next.no>heroNode.no) {
heroNode.next=temp.next;
temp.next=heroNode;
return;
}else if (temp.next.no==heroNode.no) {
System.out.printf("准备插入的英雄编号%d已存在,不能加入!\n",heroNode.no);
return;
}
temp=temp.next;
}
temp.next=heroNode;
heroNode.next=null;
}
//删除节点
public boolean delete(HeroNode heroNode) {
if (head.next==null) {
System.out.println("链表为空~");
return false;
}
HeroNode temp = head;
while (temp.next!=null) {
if (temp.next.no==heroNode.no) {
temp.next=temp.next.next;
return true;
}
temp=temp.next;
}
System.out.printf("没有找到编号为%d的节点,不能删除!\n",heroNode.no);
return false;
}
//修改节点信息,根据no来修改,编号no不能被修改
public void updata(HeroNode heroNode) {
//判断链表是否为空
if (head.next==null) {
System.out.println("链表为空~");
return;
}
//修改节点信息
HeroNode temp = head.next;
while (temp!=null) {
if (temp.no==heroNode.no) {
temp.name = heroNode.name;
temp.nickname=heroNode.nickname;
return;
}
temp=temp.next;
}
System.out.printf("没有找到编号为%d的节点,不能修改!\n",heroNode.no);
}
//查询节点
public void search(int no) {
//判断链表是否为空
if (head.next==null) {
System.out.println("链表为空~");
return;
}
//查询节点信息
HeroNode temp = head.next;
while (temp!=null) {
if (temp.no==no) {
System.out.println(temp);
return;
}
temp=temp.next;
}
System.out.printf("没有查找到编号为%d的节点,不能修改!\n",no);
}
//显示遍历
public void list() {
//判断链表是否为空
if(head.next==null) {
System.out.println("链表为空");
return;
}
//因为头结点不能动,所以需要一个新的变量
HeroNode temp = head.next;
while (temp!=null) {
System.out.println(temp);
temp=temp.next;
}
}
}
测试代码
public class Demo2 {
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, "林冲","豹子头");
HeroNode hero5 = new HeroNode(4, "测试","测试项");
HeroNode hero6 = new HeroNode(6, "测试2","测试项2");
//创建链表
SingleLinkedList2 singleLinkedList2 = new SingleLinkedList2();
singleLinkedList2.add(hero4);
singleLinkedList2.add(hero1);
singleLinkedList2.add(hero3);
singleLinkedList2.add(hero2);
//显示初始链表
System.out.println("初始链表为:");
singleLinkedList2.list();
//测试插入相同no的数据
//singleLinkedList2.add(hero5);
//修改节点信息
//singleLinkedList2.updata(hero5);
//修改不存在的节点信息
//singleLinkedList2.updata(hero6);
//测试删除节点
//boolean res= singleLinkedList2.delete(hero4);
//查找节点
System.out.println("查找结果为:");
singleLinkedList2.search(2);
//显示链表
//System.out.println("结果链表为:");
//singleLinkedList2.list();
//System.out.println(res);
}
}
【结果展示】
增
删(刪除成功则返回true)
改
查