ch8 328 홀짝 연결 리스트

1 minute read

문제

연결 리스트를 홀수 노드 다음에 짝수 노드가 오도록 재구성

풀이

반복 구조로 홀짝 노드 처리

생각

  • 홀수 노드와 짝수 노드를 각각 모아서 처리한 후 나중에 이어붙인다

책 풀이

"""
INPUT:  1    2    3    4    5
OUTPUT: 1    3    5    2    5
"""
def oddEvenList(self, head: ListNode) -> ListNode:
    if head is None:
        return None
    # 홀수만 모으기 위한 헤드
    # 1 -> 2 -> 3 -> 4 -> 5
    odd = head
    # 짝수만 모으기 위한 헤드
    # 2 -> 3 -> 4 -> 5
    even = head.next
    even_head = head.next

    while even and even_head:
        # 짝수번째에 다음 홀수번째 값을 할당한다
        # - odd.next = 1 -> 3 -> 4 -> 5
        #   - odd.next = 5
        odd.next = odd.next.next
        # 다음 홀수번째 노드로 이동
        # - odd = 3 -> 4 -> 5
        #   - odd = 5
        odd = odd.next
        # - even = 2 -> 4 -> 5
        #   - even = 4 -> None
        even.next = even.next.next
        # 다음 짝수번째 노드로 이동
        # - even = 4 -> 5
        #   - even = None
        even = even.next

    # 짝수번째 노드만 모은 헤드를 붙인다
    odd.next = even_head

    return head

Updated: