void RecursiveReverse(ListNode **ptrHead) //ll.head를 가르키는 이중포인터변수를 받음 { /* add your code here */ if ((*ptrHead)==NULL || (*ptrHead)->next==NULL) return; //헤드값이 없거나 연결리스트가 값이 없을 때 함수를 종료한다. ListNode *first=*ptrHead,*rest=first->next;//두가지 포인터변수 생성. ll.head값이 저장된 first, head 다음값인 rest. RecursiveReverse(&rest); // 재귀함수를 선언한다.위의 함수가 주소를 받는 이중포인터변수라 주소값을 넣음. first->next->next=first; //밀린 재귀들을 내려받으면서 노드의 순서를 바꿔준다. rest(5)->next=first(4) ,rest(4)->next=first(3) first->next=NULL;//first 이후의 노드의 연결을 끊어준다. 5->4->NULL 이렇게 만들어짐 *ptrHead=rest; //rest는 마지막으로 4의 값이 재귀함수위에서 저장되었을때가 마지막이라 값은 5로 고정됨. }