# l = createlist() is the equivalent of l = []

def createlist():  
    return({})

#--------------------------

# Check if list is empty

def emptylist(l):  
    return l == {}

#--------------------------

# Display a list in a readable form

def printlist(l):  
    print("{",end="")

    if l == {}:
        print("}")
    return

    node = l

    print(node["value"],end="")
    while node["next"] != {}:
        node = node["next"]
        print(",",node["value"],end="")
        print("}")
    return

#--------------------------

# Iterative list append

def appendlist(l,x): 
    if l == {}:
        l["value"] = x
        l["next"] = {}
      return

    node = l
    while node["next"] != {}:
        node = node["next"]
        
    node["next"]["value"] = x
    node["next"]["next"] = {}
    return

#--------------------------

# Recursive list append

def appendlistr(l,v):  
    if emptylist(l):
        l["value"] = v
        l["next"] = {}
    else:
        appendlistr(l["next"],v)
    return

#--------------------------

# Like Python l.insert(0,x)

def insertlist(l,x):  
    if l == {}:
        l["value"] = x
        l["next"] = {}
      return

    newnode = {}
    newnode["value"] = l["value"]
    newnode["next"] = l["next"]
    l["value"] = x
    l["next"] = newnode
    return

#--------------------------

# Delete first occurrence of v in l, if any, recursive implementation

def deletelistr(l,v): 
    if emptylist(l):
        return 
    if emptylist(l["next"]):
        if l["value"] == v:
            del(l["value"])
            del(l["next"])
        return
    if l["value"] == v:
        l["value"] = l["next"]["value"]
        l["next"] = l["next"]["next"]
    else:
        deletelistr(l["next"],v)
    return

#--------------------------
