LeetCode 328. Odd Even Linked List

개발공부를해보자·2025년 1월 12일

LeetCode

목록 보기
18/95

파이썬 알고리즘 인터뷰 문제 18번(리트코드 328번) Odd Even Linked List
https://leetcode.com/problems/odd-even-linked-list/

나의 풀이

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def oddEvenList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head or not head.next:
            return head
        
        odd = head
        even = head.next
        even_head = head.next
        curr = head.next.next

        while curr and curr.next:
            odd.next = curr
            even.next = curr.next
            odd = odd.next
            even = even.next
            curr = curr.next.next
        
        if curr:
            odd.next = curr
            odd = odd.next
        
        odd.next = even_head
        even.next = None # 처음에 이 부분 빠트려서 루프 생김.
        
        return head

다른 풀이

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def oddEvenList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head:
            return head
        
        odd = head
        even = head.next
        even_head = even

        while even and even.next:
            odd.next, even.next = odd.next.next, even.next.next
            odd, even = odd.next, even.next
            
        odd.next = even_head

        return head

오답, 배운 점

  • 항상 마지막 노드가 None 을 가르키는 지 확인해야 한다. 그렇지 않으면 루프가 생길 수 있다.
  • 홀짝 경우 모두 확인하는 건 잘했지만, 애초에 안 나눠도 되게 잘 짤 수도 있다.
  • 기준 점을 홀수가 아닌 짝수로 두고 풀면 한 경우로 풀린다.
profile
개발 공부하는 30대 비전공자 직장인

0개의 댓글