You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题原因及修正

核心错误点

  1. 循环条件写反:while(curr==None)意味着只有链表为空时才进入循环,而你的链表存在元素,所以pos方法里的循环根本没执行,自然不会输出位置值。正确条件应为while curr is not None,遍历所有非空节点。
  2. 计数器初始化位置错误:hop=0放在循环内部会导致每次循环都重置计数,无法累计正确位置。
  3. 逻辑顺序混乱:应该先判断当前节点是否匹配,再移动节点和累加计数器,避免漏判或计数偏差。

修正后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:45:31