Python getIntersectionNode预期输出[5,4,8]实际返回空列表排查
代码输出空列表的错误定位
- 循环range参数逻辑错误(空返回的核心原因)
Python的range(start, stop)默认以正1为步长生成整数序列。你写的两层循环的起始值都是-1,终止值都是-len(listB)(即比-1更小的负数),正步长下从起始值到终止值之间没有任何可迭代整数,因此两层循环的循环体完全不会执行,直接返回初始的空列表de。 - 循环内部的下标引用逻辑完全混乱
- 内层循环定义了变量
j,但判断逻辑全程没有使用j取值,反而重复用i同时索引两个列表的元素,就算循环能正常运行,也只是对比同一位置的元素,没有实现交叉匹配查找公共元素的逻辑。 - 即便判断到元素相等,追加逻辑写的是
de.append(listA[-1]),即永远固定把listA的最后一个元素加入结果,不会收集当前匹配到的元素。 - 分支判断里的
elif listA[-1] != listB[-1]逻辑完全冗余,两个列表的最后一个元素都是5,这个分支永远不会触发,还会在循环内无意义打印内容。
- 内层循环定义了变量
- 类方法定义不符合常规编码规范
按照Python的编码规范,类的实例方法第一个参数必须固定为self,用于绑定类实例的上下文。你当前定义的getIntersectionNode方法没有设置self参数,如果通过类名直接调用(也就是你当前的运行方式)虽然能传参运行,但不符合类方法的设计逻辑,后续如果要通过类实例调用该方法,会直接触发参数数量不匹配的报错。 - 实现逻辑偏离目标需求
你要找两个列表的交叉公共节点,核心逻辑是需要先把两个列表按尾部对齐,再从后往前匹配所有连续相同的公共后缀元素。当前代码没有做长度对齐、尾部匹配的相关处理,就算修正循环参数问题,也无法输出你预期的结果;同时从尾向前收集的结果顺序和你预期的[5,4,8]方向不一致,需要额外做反转操作才能匹配预期顺序。
参考修正代码:
listA = [4,1,8,4,5] listB = [5,6,1,8,4,5] class Solution(object): def getIntersectionNode(self, listA, listB): de = [] # 从两个列表的末尾开始向前对齐遍历 i, j = len(listA) - 1, len(listB) - 1 while i >= 0 and j >= 0 and listA[i] == listB[j]: de.append(listA[i]) i -= 1 j -= 1 # 反转结果匹配从后往前匹配得到的顺序 de.reverse() return de sol = Solution() print(sol.getIntersectionNode(listA, listB))
内容的提问来源于stack exchange,提问作者M A
相关产品推荐
相关产品推荐

