链表的修改和删除
修改思路
-
先找到该节点,通过遍历
-
temp.name=newHeroNode.name;temp.nickname=newHeroNode.nickname
代码实现
//修改节点的信息,根据no编号来修改,但是不能修改no,否则就变成了添加
/*
* 根据newHeroNode的no进行修改
* */
public void update(HeroNode newHeroNode) {
if (head.next == null) {
System.out.println("链表为空");
return;
}
HeroNode temp = head.next;
while (true) {
if (temp == null) {
break;// 已经遍历完链表
}
if (temp.no == newHeroNode.no) {
// 找到需要修改的节点
temp.name = newHeroNode.name;
temp.nickname = newHeroNode.nickname;
}
temp = temp.next;
}
}
// 在main方法中对以上代码进行测试
// 测试修改代码
HeroNode newHeroNode = new HeroNode(2, "小卢", "玉麒麟~~~");
singleLinkedList.update(newHeroNode);
System.out.println("修改后的链表情况");
singleLinkedList.show();
删除节点
思路
-
我们先找到要删除节点的前一个节点temp
-
temp.next=temp.next.next
-
被删除的节点,将不会有其他引用指向,会被垃圾回收机制回收
代码实现
// 删除
public void remove(int no) {
HeroNode temp = head;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.no == no) {// 找到了要删除的节点的前一个节点
temp.next = temp.next.next;
break;
}
temp = temp.next;
}
}
// 对以上代码进行测试
// 删除
singleLinkedList.remove(1);
singleLinkedList.remove(4);
singleLinkedList.remove(2);
System.out.println("删除后的链表情况");
singleLinkedList.show();