A short recursive solution, a must for interviews!
class ListNode: def __init__(self, x): self.val = x self.next = None def create_list(arr): pre = ListNode(0) tmp = pre for i in arr: tmp.next = ListNode(i) tmp = tmp.next return pre.next def print_list(head): tmp = head while tmp: print(tmp.val, end=' ') tmp = tmp.next def reverse_list(head): if head is None or head.next is None: return head else: new_head = reverse_list(head.next) # Position is very important, process the latter first head.next.next = head # Fix broken chain after recursive reversal head.next = None return new_head if __name__ == '__main__': l = create_list([0, 1, 2, 3, 4, 5]) head = reverse_list(l) print_list(head)