怎么改单链表程序

时间:2025-01-22 18:28:51 游戏攻略

修改单链表中的节点信息通常涉及以下步骤:

遍历链表:

从头节点开始,通过遍历链表找到需要修改的节点。

辅助变量:

使用一个辅助变量来保存当前节点,以便在找到目标节点后可以修改其信息。

修改信息:

在找到目标节点后,修改其信息。需要注意的是,通常节点的编号(如`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`字段,因为它是节点的唯一标识符。

如果链表为空,直接返回并提示用户链表为空。

在实际应用中,可能需要添加更多的错误处理和边界检查。