#!/usr/bin/env python3
class Cell(object):
def __init__(self, n, k, v):
self.next = n
self.key = k
self.value = v
def insertCell(head, key, value):
while head.next: head = head.next
head.next = Cell(None, key, value)
def deleteCell(head, key):
while key != head.next.key: head = head.next
head.next = head.next.next
def searchCell(head, key):
return "not found" if head.next == None else head.value if head.key == key else searchCell(head.next, key)
def clearCell(head):
while head.next != None:
tmp = head.next.next
del head.next
head.next = tmp
def printCell(head):
text = "[ "
while head.next != None:
text += str(head.next.value)
if head.next.next != None:
text += ", "
head = head.next
text += " ]"
print(text)
if __name__ == '__main__':
head = Cell(None, "head", -1)
insertCell(head, "one", 1)
insertCell(head, "two", 2)
insertCell(head, "three", 3)
printCell(head)
deleteCell(head, "two")
printCell(head)
insertCell(head, "four", 4)
insertCell(head, "five", 5)
deleteCell(head, "five")
printCell(head)
print(searchCell(head, "three"))
print(searchCell(head, "two"))
clearCell(head)
printCell(head)
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKY2xhc3MgQ2VsbChvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG4sIGssIHYpOgogICAgICAgIHNlbGYubmV4dCA9IG4KICAgICAgICBzZWxmLmtleSA9IGsKICAgICAgICBzZWxmLnZhbHVlID0gdgoKZGVmIGluc2VydENlbGwoaGVhZCwga2V5LCB2YWx1ZSk6CiAgICB3aGlsZSBoZWFkLm5leHQ6IGhlYWQgPSBoZWFkLm5leHQKICAgIGhlYWQubmV4dCA9IENlbGwoTm9uZSwga2V5LCB2YWx1ZSkKCmRlZiBkZWxldGVDZWxsKGhlYWQsIGtleSk6CiAgICB3aGlsZSBrZXkgIT0gaGVhZC5uZXh0LmtleTogaGVhZCA9IGhlYWQubmV4dAogICAgaGVhZC5uZXh0ID0gaGVhZC5uZXh0Lm5leHQKCmRlZiBzZWFyY2hDZWxsKGhlYWQsIGtleSk6CiAgICByZXR1cm4gIm5vdCBmb3VuZCIgaWYgaGVhZC5uZXh0ID09IE5vbmUgZWxzZSBoZWFkLnZhbHVlIGlmIGhlYWQua2V5ID09IGtleSBlbHNlIHNlYXJjaENlbGwoaGVhZC5uZXh0LCBrZXkpCgpkZWYgY2xlYXJDZWxsKGhlYWQpOgogICAgd2hpbGUgaGVhZC5uZXh0ICE9IE5vbmU6CiAgICAgICAgdG1wID0gaGVhZC5uZXh0Lm5leHQKICAgICAgICBkZWwgaGVhZC5uZXh0CiAgICAgICAgaGVhZC5uZXh0ID0gdG1wCgpkZWYgcHJpbnRDZWxsKGhlYWQpOgogICAgdGV4dCA9ICJbICIKICAgIHdoaWxlIGhlYWQubmV4dCAhPSBOb25lOgogICAgICAgIHRleHQgKz0gc3RyKGhlYWQubmV4dC52YWx1ZSkKICAgICAgICBpZiBoZWFkLm5leHQubmV4dCAhPSBOb25lOgogICAgICAgICAgICB0ZXh0ICs9ICIsICIKICAgICAgICBoZWFkID0gaGVhZC5uZXh0CiAgICB0ZXh0ICs9ICIgXSIKICAgIHByaW50KHRleHQpCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgaGVhZCA9IENlbGwoTm9uZSwgImhlYWQiLCAtMSkKCiAgICBpbnNlcnRDZWxsKGhlYWQsICJvbmUiLCAxKQogICAgaW5zZXJ0Q2VsbChoZWFkLCAidHdvIiwgMikKICAgIGluc2VydENlbGwoaGVhZCwgInRocmVlIiwgMykKICAgIHByaW50Q2VsbChoZWFkKQoKICAgIGRlbGV0ZUNlbGwoaGVhZCwgInR3byIpCiAgICBwcmludENlbGwoaGVhZCkKCiAgICBpbnNlcnRDZWxsKGhlYWQsICJmb3VyIiwgNCkKICAgIGluc2VydENlbGwoaGVhZCwgImZpdmUiLCA1KQogICAgZGVsZXRlQ2VsbChoZWFkLCAiZml2ZSIpCiAgICBwcmludENlbGwoaGVhZCkKCiAgICBwcmludChzZWFyY2hDZWxsKGhlYWQsICJ0aHJlZSIpKQogICAgcHJpbnQoc2VhcmNoQ2VsbChoZWFkLCAidHdvIikpCgogICAgY2xlYXJDZWxsKGhlYWQpCiAgICBwcmludENlbGwoaGVhZCkK