一道算法题,取出数组中出现次数为奇数的元素

今天遇到一个问题,大致是这样: 一个数组,L = [1, 2, 3, 4, 3, 2, 1, 2] 找出其中出现了奇数次的元素,我当时是这样想的:
result = []
for x in L:
    tmp_sum = 0
    for y in L:
        if x == y:
            tmp_sum += 1
    if tmp_sum % 2 == 1 and x not in result:
        result.append(x)
但是这样做性能很不好,循环了两次,有更好的算法:
tmp = {}
for x in L:
    if x in tmp:
        del tmp[x]
    else:
        tmp[x] = 1
第一种时间复杂度是O(n2),第二种是O(n)