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

TestDome重复播放列表问题:is_repeating_playlist函数报错求助

问题分析与修复方案

你的代码存在几个关键问题,导致测试不通过:

1. 返回值类型错误

题目要求返回布尔值True/False,但你返回的是字符串"True"/"False",这会被判定为非预期结果。

2. 仅处理了两节点循环的特殊情况

问题定义中,只要播放列表存在任意循环(不管循环长度是2还是更长),都属于重复播放列表。比如三首歌A→B→C→A的循环,你的代码完全无法检测到;同时如果播放列表是正常结束(最后一首歌指向None),你的代码会因为访问self.next.next而抛出AttributeError(当self.next是None时)。

3. 未处理边界情况

比如只有一首歌且指向自己,或者只有一首歌指向None的情况,你的代码也无法正确处理。


修复后的高效实现

可以使用快慢指针法(龟兔赛跑算法),时间复杂度O(n),空间复杂度O(1),能高效检测所有循环情况:

class Song:
    def __init__(self, name):
        self.name = name
        self.next = None

    def next_song(self, song):
        self.next = song 
    
    def is_repeating_playlist(self):
        """
        :returns: (bool) True if the playlist is repeating, False if not.
        """
        slow = self
        fast = self
        
        while fast is not None and fast.next is not None:
            slow = slow.next
            fast = fast.next.next
            
            # 快慢指针相遇,说明存在循环
            if slow is fast:
                return True
        
        # 遍历到None,说明无循环
        return False

测试验证

用你的示例测试:

first = Song("Hello")
second = Song("Eye of the tiger")
    
first.next_song(second)
second.next_song(first)
    
print(first.is_repeating_playlist())  # 输出 True

其他测试场景:

  • 单首歌指向自己:返回True
  • 三首歌循环A→B→C→A:返回True
  • 正常链A→B→C→None:返回False

内容的提问来源于stack exchange,提问作者Shalini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:30:50