C#合并有序列表问题:代码输出结果异常求助
解决有序列表合并的错误问题
嘿,我来帮你搞定这个合并有序列表的问题!首先咱们明确核心要求:用双指针法实现(时间复杂度O(n+m),比拼接后排序的O((n+m)log(n+m))效率更高),你的输出出现[1,2,3,4,5,5]而非正确结果[1,2,3,4,5,6],大概率是指针移动逻辑或边界处理出了问题。
正确的双指针实现代码
def merge_sorted_lists(list1, list2): merged = [] i = j = 0 # 两个指针分别指向两个列表的起始位置 len1, len2 = len(list1), len(list2) # 同时遍历两个列表,每次取较小的元素加入结果 while i < len1 and j < len2: if list1[i] <= list2[j]: merged.append(list1[i]) i += 1 # 移动list1的指针 else: merged.append(list2[j]) j += 1 # 移动list2的指针 # 处理其中一个列表剩余的元素(因为列表有序,直接追加即可) merged.extend(list1[i:]) merged.extend(list2[j:]) return merged # 测试你的示例输入 print(merge_sorted_lists([1,4,6], [2,3,5])) # 输出: [1,2,3,4,5,6]
分析你可能犯的错误点
结合你的错误输出[1,2,3,4,5,5],我猜测你可能遇到了以下情况之一:
- 指针移动遗漏:比如在添加
list2[j]之后,忘记递增j指针。这种情况下,当遍历到list2的最后一个元素5时,会重复添加它,直到list1的指针遍历完成。 - 剩余元素处理错误:循环结束后,错误地重复追加了
list2的剩余元素,或者完全遗漏了list1中未遍历完的6。 - 循环条件越界:比如把循环条件写成
i <= len1或j <= len2,导致指针越界后重复取到list2的末尾元素。
排查建议
你可以把自己的代码和上面的正确实现对比,重点检查:
- 每次添加元素后,对应的指针是否正确递增
- 循环结束后,是否同时处理了两个列表的剩余元素
- 循环条件是否为
i < len1和j < len2(避免指针越界)
内容的提问来源于stack exchange,提问作者Masha
相关产品推荐
相关产品推荐

