计算3个链表的平均值并以LinkedList格式返回的面试题求解
解法思路
首先明确该题的两种常见考察场景,分别对应不同的处理逻辑:
场景1:三个链表长度相同,对应位置节点求平均,输出同长度的结果链表
处理逻辑:
- 同时遍历三个链表的当前节点
- 每次取出三个节点的数值计算平均值,存入结果链表
- 直到三个链表的节点全部遍历完成
场景2:统计三个链表所有节点的总平均值,输出仅含一个节点的结果链表
处理逻辑:
- 分别遍历三个链表,累加所有节点的数值总和,统计所有节点的总数量
- 计算总平均值后存入结果链表返回
代码示例(Java实现)
import java.util.LinkedList; public class ThreeLinkedListAverage { // 场景1实现:对应位置求平均 public static LinkedList<Double> avgCorresponding(LinkedList<Integer> list1, LinkedList<Integer> list2, LinkedList<Integer> list3) { LinkedList<Double> result = new LinkedList<>(); // 校验长度是否一致 if (list1.size() != list2.size() || list2.size() != list3.size()) { throw new IllegalArgumentException("三个链表长度不一致"); } for (int i = 0; i < list1.size(); i++) { double avg = (list1.get(i) + list2.get(i) + list3.get(i)) / 3.0; result.add(avg); } return result; } // 场景2实现:所有节点求总平均 public static LinkedList<Double> avgTotal(LinkedList<Integer> list1, LinkedList<Integer> list2, LinkedList<Integer> list3) { long sum = 0; int count = 0; for (int num : list1) { sum += num; count++; } for (int num : list2) { sum += num; count++; } for (int num : list3) { sum += num; count++; } LinkedList<Double> result = new LinkedList<>(); if (count == 0) { result.add(0.0); return result; } result.add((double) sum / count); return result; } }
注意事项
- 如果题目没有明确说明对应位置平均还是总平均,面试时可以先和面试官确认需求,避免理解偏差
- 数值计算时注意整数溢出问题,求和可以用long类型存储,平均值计算要转成浮点数避免整数截断
- 边界情况要处理:比如空链表的情况,避免空指针或者除零错误
内容的提问来源于stack exchange,提问作者Naz
相关产品推荐
相关产品推荐

