문제

→ 주어진 연결 리스트를 홀수번째 값을 앞쪽에 짝수번째 값을 뒤쪽에 배치하라

→ 공간 복잡도 O(1), 시간복잡도 O(n)에 풀이할 것.

→ 입력값 : [1, 2, 3, 4, 5] / 출력값 [1, 3, 5 ,2, 4]

Untitled

접근 방법

내가 풀었던 방식은 연결리스트를 리스트화시켜 파이썬 슬라이싱 기법을 사용했으나 공간복잡도와 시간복잡도

제약을 해결하지 못했다.

해설 참조

→ 핵심 홀수와 짝수의 헤더 지정

코드

odd = head # 홀수
    even = head.next # 짝수
    even_head = head.next

    while even and even.next :
        odd.next = odd.next.next # 다음 짝수 지정
        even.next =  even.next.next # 다음 홀수 지정
        odd = odd.next # 다음 지점으로 이동
        even = even.next # 다음 지점으로 이동

    # 홀수 뒤에 짝수 배치
    odd.next = even_head
    return head