单链表
单链表(其二)
单向链表的修改和删除
背景
-
数据结构——单向链表
-
博主以b站尚硅谷Java数据结构与算法课进行学习
问题
-
使用带head头的单向链表实现–水浒传排行榜管理
-
完成单链表的修改和删除
思路
-
修改:
- 修改节点信息,根据编号来修改,即**no(编号)不能改,根据newHeroNode的no(编号)**来修改即可
- 判断链表是否为空
- 找到需要修改的节点的编号no
- 定义一个辅助变量temp,设置flag变量判断是否找到该节点
-
删除
- 先找到需要删除的节点的前一个节点temp
- temp.next = temp.next.next
- 被删除的节点,不会被其它引用,会直接被回收
步骤
-
修改
-
先判断链表是否为空
-
根据no编号,找到需要修改的节点
-
定义一个辅助变量temp和flag变量
-
代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28public void upadate(HeroNode newHeroNode) {
//判断链表是否为空
if (head.next == null) {
System.out.println("链表为空");
}
//找到需要修改的节点,根据no编号
//定义一个辅助变量temp
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.println("没有找到");
}
}
-
-
-
删除
-
head不能动,需要辅助变量temp节点找到删除节点的前一节点
-
比较时是temp.next.no和删除节点的no比较
-
代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23//删除链表
//head不能动,需要辅助变量temp节点找到删除节点的前一个节点
// 比较时,是temp.next.no和删除节点的no比较
public void 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.println("没有找到");
}
}
-
-
运行结果图
-
修改

-
删除
