如何查找Linked list中的最大元素 现有highEle实现逻辑错误求修复
问题排查
- 语法层面问题:
highEle函数没有定义在lnklst类内部,属于全局函数,无法作为链表对象的方法调用 - 空指针风险:
- 若链表为空(
self.start is None),执行b = a.nxt会直接抛出空指针异常 - 若链表仅有1个节点,
a.nxt为None,访问b.data同样会报错
- 若链表为空(
- 逻辑完全不符合需求:
- 循环内没有移动
a、b指针的逻辑,while a会进入死循环 - 存在类型错误:
a.data = self.start是将节点对象赋值给存储数值的data属性,完全不符合比较逻辑 - 随意修改
self.start会直接破坏原有链表的结构,查找最大值不需要修改原链表 - 设计逻辑和实际代码实现不匹配:设计的是初始化a=b再让b指向a.next,实际代码初始b直接是a的下一个节点,也没有实现相邻元素比较更新最大值的逻辑
- 循环内没有移动
修复方案
如果仅需要实现查找链表最大元素的功能,推荐更稳定的单指针遍历实现,完整修正代码如下:
class Node: def __init__(self, data): self.data = data self.nxt = None class lnklst: def __init__(self): self.start = None def addNode(self,value): nuNde = Node(value) if self.start is None: self.start = nuNde else: p = self.start while p.nxt != None: p = p.nxt p.nxt = nuNde def viewNde(self): tp = self.start while tp is not None: print(tp.data, end=' <--> ') tp = tp.nxt # 修正后的查找最大元素方法 def highEle(self): # 处理空链表边界 if self.start is None: return None max_val = self.start.data current = self.start # 遍历所有节点更新最大值 while current is not None: if current.data > max_val: max_val = current.data current = current.nxt return max_val
如果需要按你设计的双指针相邻比较逻辑实现,修正后的方法代码如下:
def highEle(self): if self.start is None: return None # 只有一个节点直接返回 if self.start.nxt is None: return self.start.data a = self.start max_val = a.data while a is not None: b = a.nxt # b不为空时再比较 if b is not None and b.data > max_val: max_val = b.data a = a.nxt return max_val
调用时直接执行链表对象.highEle()即可返回最大值,不会修改原有链表结构。
内容的提问来源于stack exchange,提问作者user3521180
相关产品推荐
相关产品推荐

