Python链表元素位置打印异常:代码未输出预期位置值
链表元素位置查找问题排查
用户尝试通过计数器变量hop实现打印链表中元素的位置,匹配成功时输出hop值,但运行代码后仅打印了链表元素,未输出目标元素的位置值。
需求说明:通过计数器变量
hop定位链表中目标元素的位置,匹配成功时输出该计数器值。
原代码
class Node_or_Element: def __init__(self,data): # 初始化节点/元素的方法 self.data=data self.next=None class Linked_list: def __init__(self): self.head=None def print_list(self): temp=self.head while(temp): print(temp.data) temp=temp.next def pos(self,data): curr=self.head while(curr==None): hop=0 if(curr.data!=data): curr=curr.next hop+=1 elif(curr.data==data): print(hop) # 初始化空链表 llist = Linked_list() llist.head = Node_or_Element(1) second = Node_or_Element(2) third = Node_or_Element(3) llist.head.next = second # 连接第一个节点和第二个节点 second.next = third # 连接第二个节点和第三个节点 third.next=None llist.print_list() llist.pos(2)
预期输出
1 2 3 1
实际输出
1 2 3
问题原因及修正
核心错误点
- 循环条件写反:
while(curr==None)意味着只有链表为空时才进入循环,而你的链表存在元素,所以pos方法里的循环根本没执行,自然不会输出位置值。正确条件应为while curr is not None,遍历所有非空节点。 - 计数器初始化位置错误:
hop=0放在循环内部会导致每次循环都重置计数,无法累计正确位置。 - 逻辑顺序混乱:应该先判断当前节点是否匹配,再移动节点和累加计数器,避免漏判或计数偏差。
修正后的代码
class Node_or_Element: def __init__(self,data): self.data=data self.next=None class Linked_list: def __init__(self): self.head=None def print_list(self): temp=self.head while(temp): print(temp.data) temp=temp.next def pos(self,data): curr=self.head hop = 0 # 计数器移到循环外初始化 while curr is not None: # 修正循环条件 if curr.data == data: print(hop) return # 找到目标后直接退出,避免多余遍历 # 不匹配时才移动节点并累加计数器 curr = curr.next hop += 1 # 可选:处理元素不存在的情况 print("元素不存在于链表中") # 测试代码保持不变 llist = Linked_list() llist.head = Node_or_Element(1) second = Node_or_Element(2) third = Node_or_Element(3) llist.head.next = second second.next = third llist.print_list() llist.pos(2)
修正后输出
1 2 3 1
内容的提问来源于stack exchange,提问作者Syed Nahid
相关产品推荐
相关产品推荐

