class Node:
def __init__(self, value, next=None):
self.value = value
self.next = next
# For testing
def print_linked_list(head):
current = head
while current:
print(current.value, end=" -> " if current.next else "\n")
current = current.next
def find_max(head):
maxv = head.value
cur = head.next
while (cur):
maxv = max(maxv, cur.value)
cur = cur.next
return maxv
def remove_tail(head):
if head is None:
return None
if head.next is None:
return None
current = head
while current.next.next:
current = current.next
current.next = None
return head
def delete_dupes(head):
temph = Node(0,head)
prev = temph
cur = head
cur2 = head.next
while (cur2):
if (cur.value == cur2.value):
prev.next = cur2.next
cur = cur2.next
cur2 = cur.next
else:
prev = cur
cur = cur2
cur2 = cur2.next
return temph.next
class Node:
def __init__(self, value, next=None):
self.value = value
self.next = next
def has_cycle(head):
slow = head
fast = head.next.next
while (slow.next and fast):
if (slow == fast):
return True
slow = slow.next
fast = fast.next.next
return False
def remove_nth_from_end(head, n):
count = 1
cur = head.next
while (cur):
count+=1
cur = cur.next
temph = Node(0,head)
prev = temph
cur = head
for i in range(count-n):
prev = cur
cur = cur.next
prev.next = cur.next
return temph.next
def reverse_first_k(head, k):
temph = Node(0,head)
prev = temph
cur = head
for i in range(k-1):
if (cur == None):
break
nexte = cur.next
prev.next = cur.next
prev = cur
cur = nexte
return temph.next
head = Node("apple", Node("cherry", Node("orange", Node("peach", Node("pear")))))
print_linked_list(reverse_first_k(head, 3))
Y2xhc3MgTm9kZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgbmV4dD1Ob25lKToKICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgICAgICBzZWxmLm5leHQgPSBuZXh0CgojIEZvciB0ZXN0aW5nCmRlZiBwcmludF9saW5rZWRfbGlzdChoZWFkKToKICAgIGN1cnJlbnQgPSBoZWFkCiAgICB3aGlsZSBjdXJyZW50OgogICAgICAgIHByaW50KGN1cnJlbnQudmFsdWUsIGVuZD0iIC0+ICIgaWYgY3VycmVudC5uZXh0IGVsc2UgIlxuIikKICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0CgpkZWYgZmluZF9tYXgoaGVhZCk6CiAgICBtYXh2ID0gaGVhZC52YWx1ZQogICAgY3VyID0gaGVhZC5uZXh0CiAgICB3aGlsZSAoY3VyKToKICAgIAltYXh2ID0gbWF4KG1heHYsIGN1ci52YWx1ZSkKICAgIAljdXIgPSBjdXIubmV4dAogICAgcmV0dXJuIG1heHYKCmRlZiByZW1vdmVfdGFpbChoZWFkKToKICAgIGlmIGhlYWQgaXMgTm9uZToKICAgICAgICByZXR1cm4gTm9uZQogICAgaWYgaGVhZC5uZXh0IGlzIE5vbmU6CiAgICAgICAgcmV0dXJuIE5vbmUgCiAgICAgICAgCiAgICBjdXJyZW50ID0gaGVhZAogICAgd2hpbGUgY3VycmVudC5uZXh0Lm5leHQ6IAogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQKCiAgICBjdXJyZW50Lm5leHQgPSBOb25lCiAgICByZXR1cm4gaGVhZAoKZGVmIGRlbGV0ZV9kdXBlcyhoZWFkKToKCXRlbXBoID0gTm9kZSgwLGhlYWQpCglwcmV2ID0gdGVtcGgKCWN1ciA9IGhlYWQKCWN1cjIgPSBoZWFkLm5leHQKCXdoaWxlIChjdXIyKToKCQlpZiAoY3VyLnZhbHVlID09IGN1cjIudmFsdWUpOgoJCQlwcmV2Lm5leHQgPSBjdXIyLm5leHQKCQkJY3VyID0gY3VyMi5uZXh0CgkJCWN1cjIgPSBjdXIubmV4dAoJCWVsc2U6CgkJCXByZXYgPSBjdXIKCQkJY3VyID0gY3VyMgoJCQljdXIyID0gY3VyMi5uZXh0CglyZXR1cm4gdGVtcGgubmV4dAoKCmNsYXNzIE5vZGU6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIG5leHQ9Tm9uZSk6CiAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICAgICAgc2VsZi5uZXh0ID0gbmV4dAoKZGVmIGhhc19jeWNsZShoZWFkKToKICAgIHNsb3cgPSBoZWFkCiAgICBmYXN0ID0gaGVhZC5uZXh0Lm5leHQKICAgIHdoaWxlIChzbG93Lm5leHQgYW5kIGZhc3QpOgogICAgCWlmIChzbG93ID09IGZhc3QpOgogICAgCQlyZXR1cm4gVHJ1ZQogICAgCXNsb3cgPSBzbG93Lm5leHQKICAgIAlmYXN0ID0gZmFzdC5uZXh0Lm5leHQKICAgIHJldHVybiBGYWxzZQpkZWYgcmVtb3ZlX250aF9mcm9tX2VuZChoZWFkLCBuKToKICAgIGNvdW50ID0gMQogICAgY3VyID0gaGVhZC5uZXh0CiAgICB3aGlsZSAoY3VyKToKICAgIAljb3VudCs9MQogICAgCWN1ciA9IGN1ci5uZXh0CiAgICB0ZW1waCA9IE5vZGUoMCxoZWFkKQogICAgcHJldiA9IHRlbXBoCiAgICBjdXIgPSBoZWFkCiAgICBmb3IgaSBpbiByYW5nZShjb3VudC1uKToKICAgIAlwcmV2ID0gY3VyCiAgICAJY3VyID0gY3VyLm5leHQKICAgIHByZXYubmV4dCA9IGN1ci5uZXh0CiAgICByZXR1cm4gdGVtcGgubmV4dAoKZGVmIHJldmVyc2VfZmlyc3RfayhoZWFkLCBrKToKCXRlbXBoID0gTm9kZSgwLGhlYWQpCglwcmV2ID0gdGVtcGgKCWN1ciA9IGhlYWQKCQoJZm9yIGkgaW4gcmFuZ2Uoay0xKToKCQlpZiAoY3VyID09IE5vbmUpOgoJCQlicmVhawoJCW5leHRlID0gY3VyLm5leHQKCQlwcmV2Lm5leHQgPSBjdXIubmV4dAoJCXByZXYgPSBjdXIKCQljdXIgPSBuZXh0ZQoJcmV0dXJuIHRlbXBoLm5leHQKaGVhZCA9IE5vZGUoImFwcGxlIiwgTm9kZSgiY2hlcnJ5IiwgTm9kZSgib3JhbmdlIiwgTm9kZSgicGVhY2giLCBOb2RlKCJwZWFyIikpKSkpCgpwcmludF9saW5rZWRfbGlzdChyZXZlcnNlX2ZpcnN0X2soaGVhZCwgMykpCiAgICA=