public static ListNode swapPairs(ListNode head) {
if(head == null || head.next == null) return head;
//바꿀 노드가 없다면 그 자신을 리턴
ListNode prev = head; //1 2 3 4
ListNode cur = head.next; //2 3 4
ListNode next = head.next.next;// 3 4
head = cur;
head.next = prev;
head.next.next = swapPairs(next);
return head;
}
우리가 바꾸어야 하는 것은 현재와 다음 노드를 바꾸는 것이다.
바꾸기 전에 해야하는 것은 head 노드를 가지고 변수들을 할당하는 것이다.
head, head.next 를 바꾸어야 하고 head.next.next 로 이동해야한다.
위의 예인 1->2->3->4 를 보면
prev, cur, next 를 각각 할당해주고
바꾼 후의 head는 2가 되어야 하므로 cur,
head.next 는 1로 시작되어야 하므로 prev,
head.next.next 는 3->4 에서 swap 을 해주어야 하는 노드의 값이므로 재귀가 나타난다.
아무리 봐도 적응이 안되는 재귀와 한창 c 주소 공부할 때의 next ,,,