public void reverse() {
Node pointer = head;
Node previous = null, current = null;
while (pointer != null) {
current = pointer;
pointer = pointer.next;
// reverse the link
current.next = previous;
previous = current;
head = current;
}
}