C언어 역순서 구현(재귀함수)

Jeonghwan Yoon·2025년 4월 14일
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로 고정됨.
}
profile
안녕하세요.

0개의 댓글