修改单链表中的节点信息通常涉及以下步骤:
遍历链表:
从头节点开始,通过遍历链表找到需要修改的节点。
辅助变量:
使用一个辅助变量来保存当前节点,以便在找到目标节点后可以修改其信息。
修改信息:
在找到目标节点后,修改其信息。需要注意的是,通常节点的编号(如`no`)是不能修改的,因为它是节点的唯一标识符。
```java
import java.util.Scanner;
class HeroNode {
int no; // 节点的编号,通常不能修改
String name;
String nickname;
public HeroNode(int no, String name, String nickname) {
this.no = no;
this.name = name;
this.nickname = nickname;
}
}
public class SingleLinkedListDemo {
private static HeroNode head = null;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请选择你要执行的操作:");
System.out.println("add: 往链表中添加数据");
System.out.println("show: 遍历整个链表");
System.out.println("quit: 退出程序");
System.out.println("update: 更新节点信息");
System.out.print("请输入操作:");
String choice = sc.next();
switch (choice) {
case "add":
addByOrder(new HeroNode(0, "New Hero", "New Nickname"));
break;
case "show":
showList();
break;
case "quit":
sc.close();
return;
case "update":
updateNode(new HeroNode(0, "Updated Name", "Updated Nickname"));
break;
default:
System.out.println("无效的操作,请重新选择。");
}
}
}
public static void addByOrder(HeroNode heroNode) {
if (head == null) {
head = heroNode;
} else {
HeroNode temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = heroNode;
}
}
public static void showList() {
HeroNode temp = head;
while (temp != null) {
System.out.println("No: " + temp.no + ", Name: " + temp.name + ", Nickname: " + temp.nickname);
temp = temp.next;
}
}
public static void updateNode(HeroNode newHeroNode) {
if (head == null) {
System.out.println("链表为空");
return;
}
HeroNode temp = head;
boolean flag = false;
while (temp != null) {
if (temp.no == newHeroNode.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.name = newHeroNode.name;
temp.nickname = newHeroNode.nickname;
} else {
System.out.println("没有找到等于这个节点的编号,修改失败!");
}
}
}
```
关键点解释:
遍历链表:
使用`while`循环遍历链表,直到找到目标节点或遍历结束。
辅助变量:
使用`temp`变量来保存当前节点。
修改信息:
在找到目标节点后,修改其`name`和`nickname`字段。
注意事项:
确保在修改节点信息时,不修改节点的`no`字段,因为它是节点的唯一标识符。
如果链表为空,直接返回并提示用户链表为空。
在实际应用中,可能需要添加更多的错误处理和边界检查。