[LeetCode] 92. Reverse Linked List II 역순 연결 리스트Ⅱ

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

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

 

# 문제 설명 

92번 Reverse Linked List II 는 인덱스 m에서 n까지를 역순으로 만드는 문제이다.

Example

 

 

# 풀이방법 1 -  재귀 함수 이용하여 reverse (내 풀이)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
        
        # reverse 함수에서 노드의 값을 저장하는 큐
        values = deque()
        
        cnt = 0
        # 재귀함수
        # : 연결 리스트 끝단까지 접근하여 val을 큐에 저장하였다가, 되돌아오면서 큐에 있던 값을 꺼내 값을 변경함
        def reverse(node : ListNode, cnt):
            
            cnt += 1
            
            if cnt >= left and cnt <= right :
                values.append(node.val) # 노드의 val을 큐에 저장
            
            if node.next != None : 
                # print('node : ', node)
                reverse(node.next, cnt) # 재귀 함수 호출
            
            if cnt >= left and cnt <= right :
                node.val = values.popleft() # 큐에 저장된 값들로 노드의 val 변경
                
            return node
    
        if head != None:
            head = reverse(head, cnt)
        
        return head

| 아이디어  | 

206번 Reverse Linked List 풀이를 조금 변형하여 풀었다. 

재귀함수를 돌며, 몇 번째 노드인지 확인을 하다가 인덱스 조건을 만족하면 노드의 값을 큐에 저장하였다가,

다시 돌아오는 재귀 흐름에서 인덱스 조건 만족 시, 큐에서 값을 꺼내어 값을 변경한다.

 

 

 

# 풀이 방법 2 - 반복 구조로 뒤집기 (책 풀이 참고)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
        
        # 예외 처리
        if not head or m==n : 
        	return head
           
        root = start = ListNode(None)
        root.next = head 
        
        # start와 end 노드 지정 
        for _ in range(m-1):
        	start = start.next
        end = start.next
        
        
      	# 반복하면서 노드 뒤집기
        for _ in range(n-m) :
        	tmp, start.next, end.next = start.next, end.next, end.next.next
            start.next.next = tmp
            
        return root.next

| 아이디어 | 

뒤집어야 하는 노드의 시작과 끝의 노드를 저장한다. 그런다음 for문을 돌며 노드를 차례대로 뒤집는다.

 

 

| 핵심 |

# 반복하면서 노드 뒤집기
        for _ in range(n-m) :
         tmp, start.next, end.next = start.next, end.next, end.next.next
            start.next.next = tmp

 

 

# 결과 

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

[LeetCode] 20. Valid Parentheses 유효한 괄호  (0) 2022.02.23
[LeetCode] 21. Merge Two Sorted List 두 정렬 리스트 병합  (0) 2022.02.21
[LeetCode] 328. Odd Even Linked List 홀짝 연결 리스트  (0) 2022.02.21
[LeetCode] 24. Swap Nodes in Pairs 페어의 노드 스왑  (0) 2022.02.21
[LeetCode] 2. Add Two Numbers 두 수의 덧셈  (0) 2022.02.21
  1. # 문제 설명 
'#️⃣ Project 및 개발일지/Algorithm 문제 풀이' 카테고리의 다른 글
  • [LeetCode] 20. Valid Parentheses 유효한 괄호
  • [LeetCode] 21. Merge Two Sorted List 두 정렬 리스트 병합
  • [LeetCode] 328. Odd Even Linked List 홀짝 연결 리스트
  • [LeetCode] 24. Swap Nodes in Pairs 페어의 노드 스왑
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] 92. Reverse Linked List II 역순 연결 리스트Ⅱ
상단으로

티스토리툴바

개인정보

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

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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