Reverse Linked List Recursively
Problem
Reverse a singly linked list recursively.
Example
1
2
Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
My Answer
head.next == null인 경우가 마지막 노드인데, 우린 마지막 노드를Head로 사용 해야 한다.- 이하
head로 되어 있지만, 그냥cur(현재 처리 중인 노드)로 생각하는게, 이해하는데 도움 된다. cur.next는 현재 노드의 그 다음 노드를 가리키는데, 이것이 현재 노드의 새로운head로서 역할해야 한다.rest는 사실상 맨 마지막 노드만 설정되고 계속 그 상태로reverseList의 상위 호출 부분으로 가도 무방하다. 어짜피 참조타입이라reverseList함수를 재귀로 호출 하는 부분 위, 아래에서 열심히 새로운 형태로 뒤집고 있다. 결국 뒤집어진 완성형을 최종 리턴하기 위한 존재일 뿐.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public ListNode reverseList(ListNode head) {
if ( head == null )
return null;
if ( head.next == null)
return head;
ListNode new_head = head.next;
ListNode rest = reverseList(head.next);
head.next = null;
new_head.next = head;
return rest;
}
}