[LeetCode] 328. Odd Even Linked List 홀짝 연결 리스트

2022. 2. 21. 20:03· #️⃣ Project 및 개발일지/Algorithm 문제 풀이
목차
  1. # 문제 설명 

파이썬으로 배우는 알고리즘 책을 공부하며 풀었던 LeetCode문제들을 재정리해보자.

 

# 문제 설명 

328번 Odd Even Linked List는 입력받은 연결 리스트를 홀수 번째 노드 다음에 짝수 번째 노드가 오도록 재구성하는 문제이다.

Example

 

 

# 풀이방법 1 - 연결리스트 값을  리스트로 저장 후, 연결리스트로 변환 (내 풀이)

# 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]:
    
        root = result = ListNode() 
        
        odd = [] # 홀수 
        even = []  # 짝수
        
        cnt = 1
        
        if head is None :
            return head
        
        # 연결리스트를 순회하며 홀수번째와 짝수번째인지에 따라 값을 저장한다. 
        while head :
            if cnt %2 == 1 :
                odd.append(head.val)
            else :
                even.append(head.val)
                
            head = head.next
            cnt +=1 
        
        # 홀수와 짝수값 리스트를 합친다.
        odd += even
    
        # 리스트를 연결리스트로 변환
        for idx in range(0, cnt-1) :
            result.val = odd[idx] 
            if idx != cnt-2 :
                result.next = ListNode()
                result = result.next
            
        return root

| 아이디어 및 흐름 |

연결리스트를 while문으로 순회하며, 홀수번째와 짝수번째의 값들을 각각의 리스트로 저장 후, 두 리스트를 합쳐 다시 연결리스트로 변환한다. 

1. 주어진 연결리스트가 빈 리스트인지 확인한다.

2. 연결리스트를 while문으로 순회하며, 홀수번째와 짝수번째의 값들을 각각의 리스트로 저장한다.

3. 두 리스트를 합치고, 합친 리스트를 연결리스트로 만든다.

 

하지만 위 풀이는 편법적인 풀이고, 책 저자는 이는 우아하지 않는 풀이법이라고 하였다. 또한 오프라인 코딩 테스트에서는 지적받을 수 있다고 한다. 

 

# 풀이 방법 2 - 반복 구조로 홀짝 노드 처리 (책 풀이 참고)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        
        # 예외 처리 
        if head is None :
        	return None
            
        odd = head
        even = head.next
        even_head = head.next
        
        #반복하면서 홀짝 처리 
        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

| 흐름 | 

하나의 while문을 돌며 짝수, 홀수들끼리 노드를 연결한다. 이때 홀수, 짝수를 연결하기 위해 짝수 헤드는 따로 저장해준다.그 다음엔 홀수 노드 마지막을 짝수 헤드로 연결한다. 

 

 

| 핵심 |

#반복하면서 홀짝 처리 
        while even and even.next :
         odd.next, even.next = odd.next.next, even.next.next
            odd, even = odd.next, even.next

 

# 결과 

'#️⃣ Project 및 개발일지 > Algorithm 문제 풀이' 카테고리의 다른 글

[LeetCode] 21. Merge Two Sorted List 두 정렬 리스트 병합  (0) 2022.02.21
[LeetCode] 92. Reverse Linked List II 역순 연결 리스트Ⅱ  (0) 2022.02.21
[LeetCode] 24. Swap Nodes in Pairs 페어의 노드 스왑  (0) 2022.02.21
[LeetCode] 2. Add Two Numbers 두 수의 덧셈  (0) 2022.02.21
[LeetCode] 206. Reverse Linked List 역순 연결 리스트  (0) 2022.02.17
  1. # 문제 설명 
'#️⃣ Project 및 개발일지/Algorithm 문제 풀이' 카테고리의 다른 글
  • [LeetCode] 21. Merge Two Sorted List 두 정렬 리스트 병합
  • [LeetCode] 92. Reverse Linked List II 역순 연결 리스트Ⅱ
  • [LeetCode] 24. Swap Nodes in Pairs 페어의 노드 스왑
  • [LeetCode] 2. Add Two Numbers 두 수의 덧셈
HyeM207
HyeM207
"Reflections and Growth Through Records" 회고와 기록을 통한 성장으로
HyeM207
HYEM's Storage
HyeM207
  • ALL (115)
    • #️⃣ CS (Computer Science) (5)
      • Database (2)
      • SQL (2)
      • Git (1)
    • #️⃣ Data Engineering (43)
      • Airflow (18)
      • Spark (8)
      • Snowflake (2)
      • BI,DashBoard (4)
      • ELK Stack (2)
      • Hadoop (5)
      • Kafka (4)
    • #️⃣ Cloud&Container (16)
      • AWS (8)
      • GCP (1)
      • Docker (6)
      • Kubernetes (1)
    • #️⃣ Project 및 개발일지 (37)
      • Mini Project (5)
      • 개발일지 (9)
      • Algorithm 문제 풀이 (20)
    • #️⃣ 책 리뷰 (4)
    • #️⃣ 회고글&프로젝트 후기 (10)

공지사항

인기 글

최근 댓글

블로그 메뉴

  • 홈
  • 태그
  • 방명록
hELLO · Designed By 정상우.v4.2.2
HyeM207
[LeetCode] 328. Odd Even Linked List 홀짝 연결 리스트
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.