# länkad lista
#
# En länkad lista består av nod-objekt:
#
# +----+----+
# |data|next|
# +----+----+
#
# False avslutar listan:
#
# +---+---+   +---+---+   +---+-----+
# | | | ----->| | | ----->| | |False|
# +-|-+---+   +-|-+---+   +-|-+-----+
#   V           V           V      
#   1           2           3      
#


# Listnod
#
class Node (object):
    def __init__ (self, data, nextNode):
        self.data = data
        self.nextNode = nextNode

# Konstruera en listnod
# (kan också göras genom att helt enkelt anropaNode (data, nextNode))
#
def cons (data, nextNode):
    return Node (data, nextNode)

# Konstruera lista med tre element
#
def list3 (data1, data2, data3):
    return cons (data1, cons (data2, cons (data3, False)))

# Skriv ut lista
# (något mer komplicerad version än den vi gick igenom på
# föreläsningen för att få utskriften snygg)
#
def printList (ls):
    print ("[", end="")
    # Finns åtminstone ett element i listan?
    if ls:
        # Skriv ut första elementet utan inledande komma och mellanslag
        print (ls.data, end="")
        # Skriv ut resten
        ls = ls.nextNode
        while ls:
            print (",", ls.data, end="") # komma och mellanslag först
            ls = ls.nextNode
    print ("]")

# Demonstration
    
ls = list3 (1, 2, 3)

printList (ls)
