合并两个升序有序整数列表代码出现索引越界错误如何修复
两个升序整数列表合并问题修复方案
问题根源
- 循环边界配置错误:合并后列表总长度为
list_a.Count + list_b.Count,原有代码设置为总长度减2,会直接遗漏最后2个元素 - 缺少指针越界校验:当其中一个列表的元素全部添加完成后,后续循环仍会访问该列表超出范围的索引,触发越界报错
修复后实现代码
static List<int> Merge(List<int> list_a, List<int> list_b) { List<int> list_c = new List<int>(); int countA = 0, countB = 0; int totalCount = list_a.Count + list_b.Count; for (int i = 0; i < totalCount; i++) { // list_a未遍历完,且list_b已遍历完/当前a元素更小 if (countA < list_a.Count && (countB >= list_b.Count || list_a[countA] <= list_b[countB])) { list_c.Add(list_a[countA]); countA++; } // list_b未遍历完 else { list_c.Add(list_b[countB]); countB++; } } return list_c; }
效果验证
使用原测试用例运行修复后代码,输出结果为1,2,3,4,5,6,7,8,9,符合预期,无越界报错。
内容的提问来源于stack exchange,提问作者Paris
相关产品推荐
相关产品推荐

