구조체 list를 이용한 두 개의 단순연결리스트 x, y의 후위노드(음영부분)들을 서로 스왑(swap)하기 위한 코드는? (단, 후위노드들의 next는 NULL이 아니다)

struct list { int data; struct list *next; } *x, *y, *tmp; - ①
tmp = x->next; x->next->next = y->next->next; y->next->next = tmp; tmp = y->next; x->next = y->next; y->next = tmp;
- ②
tmp = x->next->next; x->next->next = y->next->next; y->next->next = tmp; tmp = x->next; x->next = y->next; y->next = tmp;
- ③
tmp = x->next; x->next = y->next; y->next = tmp; tmp = x->next; x->next->next = y->next->next; y->next->next = tmp;
- ④
tmp = x->next->next; y->next->next = tmp; x->next->next = y->next->next; tmp = x->next; y->next = tmp; x->next = y->next;
선지를 골라 바로 채점해 보세요.
정답 ②
출처: 인사혁신처 공개 기출(공공데이터포털, 이용허락 제한 없음)