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

如何检测链表中元素是否存在,避免添加重复元素?

问题原因及解决方法

你的问题出在Appartient函数的实现上——你错误地通过将集合转为字符串后,取字符的ASCII值来判断元素是否存在,这完全不符合逻辑:

  • 数字的字符串形式(比如10)会被拆成'1'和'0'两个字符,它们的ASCII值分别是49和48,和原数字10完全不相等
  • 字符串的长度和集合元素数量也不对应(比如多位数元素会让字符串长度大于元素个数)

正确的做法是直接遍历链表的每个节点,对比节点的elem字段和目标值:

func (e Ensemble) Appartient(valeur int) bool {
    for curr := e.ensemble; curr != nil; curr = curr.suivant {
        if curr.elem == valeur {
            return true
        }
    }
    return false
}

替换掉原来的Appartient函数后,Ajouter方法就能正确检测重复元素,最终输出会是{10 20 42},元素数量为3,不会出现重复的10。

另外可以优化下String方法的输出格式,让它更规范:

func (c Cellule) String() string {
    return fmt.Sprintf("%v", c.elem)
}

func (e Ensemble) String() string {
    if e.EstVide() {
        return "{}"
    }
    res := "{"
    for curr := e.ensemble; curr != nil; curr = curr.suivant {
        res += fmt.Sprintf("%v ", curr.elem)
    }
    return res[:len(res)-1] + "}"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:25:24