Determining if a palindrome exists in a linked list using recursion
Generally, when you end up with an expression like this, it is a sign that something is not right, and something needs rethinking or refactoring.

I don't see the point of node here - since you always write to node[0] -  and if you would eliminate it, that is, use it as the return value, your function would be a lot simpler:

def recurse(head, length):
    if length == 1:  # odd number of nodes
        return head.next
    elif length == 0:  # even number of nodes
        return head

    return recurse(head.next, length//2)


or, on one line

def recurse(head, length):
    return head if length==0 else head.next if length==1 else recurse(head.next, length//2)


BUT - 1//2 == 0, so both of these get a lot easier if you realize you have only one base case:

def recurse(head, length):
    if length == 0:
        return head

    return recurse(head.next, length//2)


or, on one line:

def recurse(head, length):
    return head if length==0 else recurse(head.next, length//2)


Of course, this might be better not to recurse:

def nonrecurse(head, length):
    while (length &gt; 0): 
        head = head.next
        length//=2

    return head