如何对链表中特定数值执行加法?Java网络链表程序报错求助
链表操作问题解答
嘿,我来帮你搞定这两个链表相关的问题,先从你碰到的具体Java代码bug说起:
一、你的Java链表节点字段自增失败的原因与修复
你写的list.get(lastPostion).getInfor()+1;其实只做了计算临时值的操作,根本没把加1后的结果存回节点里!这就像你拿了钱包里的钱数加1,但没把新的数字写回钱包一样,完全不会改变实际值。
修复方法很简单,分两步:
- 先拿到链表中对应的节点对象
- 计算新值后,通过setter方法把它存回去
举个完整的例子(顺便提一句,Java类名建议用大驼峰,比如WorkPls,字段用小驼峰,更符合编码规范):
class WorkPls { private int infor; // 你的其他连接详情字段,比如ip、端口之类的 // 构造方法 public WorkPls(int infor) { this.infor = infor; } // getter public int getInfor() { return infor; } // setter,这个是关键!你之前可能没写这个 public void setInfor(int infor) { this.infor = infor; } }
然后在你的for循环里,改成这样:
// 假设list是LinkedList<WorkPls>类型 for (int i = 0; i < 10; i++) { // 拿到目标节点 WorkPls targetNode = list.get(lastPostion); // 计算新值并设置回去 targetNode.setInfor(targetNode.getInfor() + 1); // 执行你的打印操作 System.out.println(targetNode.getInfor()); }
另外还要检查两个点:
lastPostion是不是合法的索引?比如不能超过list.size()-1,不然会抛IndexOutOfBoundsException- 你的
list是不是正确声明为存储WorkPls对象的链表,比如LinkedList<WorkPls> list = new LinkedList<>();
二、如何对链表中的特定数值执行加法操作
这个问题要看你是想修改所有匹配特定值的节点,还是第一个匹配的节点,分两种情况处理:
1. 修改所有匹配特定值的节点
遍历整个链表,逐个检查节点的目标字段,符合条件就给它加指定数值:
// 假设链表是LinkedList<Node>,Node有getValue和setValue方法 int targetNum = 5; // 要找的特定数值 int addNum = 3; // 要加的数 for (Node node : list) { if (node.getValue() == targetNum) { node.setValue(node.getValue() + addNum); } }
2. 修改第一个匹配特定值的节点
找到第一个符合条件的节点后修改,然后停止遍历,避免做无用功:
boolean isFound = false; for (Node node : list) { if (node.getValue() == targetNum) { node.setValue(node.getValue() + addNum); isFound = true; break; } } if (!isFound) { System.out.println("没找到对应数值的节点哦"); }
如果是你自己实现的自定义链表(不是Java自带的LinkedList),那就要用指针遍历:
Node current = head; while (current != null) { if (current.getValue() == targetNum) { current.setValue(current.getValue() + addNum); // 如果只改第一个,这里加break;改所有就继续循环 // break; } current = current.getNext(); }
最后提醒下:如果你的字段是包装类(比如Integer),因为它是不可变的,不能直接修改,要重新赋值新的对象,比如node.setInfor(node.getInfor() + 1);其实会自动装箱成新的Integer对象,这点不用太担心。
内容的提问来源于stack exchange,提问作者obinna
相关产品推荐
相关产品推荐

