文章目录
- 单链表的操作
- 节点的修改
- 节点的删除
单链表的操作
节点的修改
- 在之前创建好链表的基础上,我们对其中的节点进行修改:
编号不变,英雄名称和昵称可以改变
。 - 主要的思路就是,通过修改方法传入新的节点(节点编号任意),若节点编号与已存在的节点相等,进行修改;否则,不好修改。
//进行节点的修改 ---- 根据no编号进行
public void update(HeroNode newHeroNode){
if (head.next==null){
System.out.println("链表为空!");
return;
}
// 构建辅助节点
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的英雄!",newHeroNode.no);
}
}
测试
// 输出链表
singleLinkedList.showList();
// 修改节点
singleLinkedList.update(new HeroNode(5,"阿逵","小逵逵"));
// 输出链表
singleLinkedList.showList();
返回顶部
节点的删除
节点的删除,意味着链表中间的next域连续指向的断裂,所以我们要将next域重新从删除的节点处连接起来。如上图所示,假设我们要删除数据4节点,由于原来数据4的next域指向数据7,数据1的next域指向数据4,所以现在我们要将数据1的next域指向数据7。
主要思路:
- 1.head头部节点依然不能动,同样是借助temp辅助节点
- 2.在比较的时候将
temp.next.no
与要被删除的节点的no
进行比较。
// 删除节点
public void delete(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);
}
}
// 删除节点
singleLinkedList.delete(5);
singleLinkedList.showList();
singleLinkedList.delete(5);
singleLinkedList.showList();
测试
返回顶部