0
点赞
收藏
分享

微信扫一扫

【数据结构与算法】单链表 ----节点的修改、删除



文章目录

  • ​​单链表的操作​​
  • ​​节点的修改​​
  • ​​节点的删除​​

单链表的操作

节点的修改

【数据结构与算法】单链表 ----节点的修改、删除_链表

  • 在之前创建好链表的基础上,我们对其中的节点进行修改:编号不变,英雄名称和昵称可以改变
  • 主要的思路就是,通过修改方法传入新的节点(节点编号任意),若节点编号与已存在的节点相等,进行修改;否则,不好修改。

//进行节点的修改 ---- 根据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();

【数据结构与算法】单链表 ----节点的修改、删除_数据结构_02


【数据结构与算法】单链表 ----节点的修改、删除_数据_03

​​返回顶部​​

节点的删除

【数据结构与算法】单链表 ----节点的修改、删除_算法_04


节点的删除,意味着链表中间的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();

测试

【数据结构与算法】单链表 ----节点的修改、删除_数据结构_05


【数据结构与算法】单链表 ----节点的修改、删除_链表_06

​​返回顶部​​


举报

相关推荐

0 条评论