In [22]:
class Node:
    def __init__(self,val=None,next_node=None):
        self.data=val
        self.next=next_node
    
    def __repr__(self):
        cur=self
        s=str(cur.data)
        while cur.next:
            cur=cur.next
            s=s+'->'+str(cur.data)
        return s



def Reverse1(head):
    if not head:
        return None
    
    cur = head
    pre=None
    
    while cur:
        n= cur.next
        cur.next=pre
        
        pre=cur
        cur=n
        
    return pre

def Reverse2(head):
    if not head:
        return None
    
    def relink(cur,pre):
        if not cur:
            return pre
        
        n=cur.next
        cur.next=pre
        return relink(n, cur)
    
    return relink(head,None)


H=Node(1, Node(2, Node(3)))
print(Reverse1(H))

H=Node(1, Node(2, Node(3)))

H=Node(1, Node(2))

print(Reverse2(H))


> 1
> 2
> 3
3->2->1
2->1