public ListNode reverseList(ListNode head) {
return helper(head, null);
}
private ListNode helper(ListNode head, ListNode newHead) {
if (head == null) return newHead;
ListNode next = head.next;
head.next = newHead;
return helper(next, head);
}
public ListNode reverseList(ListNode head) {
ListNode prev = null, node = head;
while (node != null) {
ListNode copy = new ListNode(node.val);
copy.next = prev;
prev = copy;
node = node.next;
}
return prev;
}