문제
문제의 내용을 요약하면, 연결 리스트를 역순으로 재구성한 후 반환하여야 한다.
풀이
이 문제는 21. Merge Two Sorted Lists와 같이 새로운 노드를 생성하는 방식으로 해결하는데, 문제에서 주어진 예시로 과정을 나타내보면 다음과 같다.
더미 노드 생성
현재 노드(current
)를 연결 리스트의 head
로 정하고, 새로운 노드(node
를 None으로 초기화한다.
current, node = head, None
반복하며 스와핑
현재 노드 즉, 기존 연결 리스트의 head가 되는 모든 노드를 탐색하며 새로운 노드로 값을 넘겨준다. 이 과정을 다음과 같이 나타낼 수 있다.
첫 번째 반복
current: ListNode: [1 -> 2 -> 3 -> 4 -> 5]
1) next = ListNode: [2 -> 3 -> 4 -> 5]
2) current.next = None
3) node = ListNode: [1]
4) current = ListNode: [2 -> 3 -> 4 -> 5]
두 번째 반복
current: ListNode: [2 -> 3 -> 4 -> 5]
1) next = ListNode: [3 -> 4 -> 5]
2) current.next = ListNode: [1]
3) node = ListNode: [2 -> 1]
4) current = ListNode: [3 -> 4 -> 5]
세 번째 반복
current: ListNode: [3 -> 4 -> 5]
1) next = ListNode: [4 -> 5]
2) current.next = ListNode: [2 -> 1]
3) node = ListNode: [3 -> 2 -> 1]
4) current = ListNode: [4 -> 5]
네 번째 반복
current: ListNode: [4 -> 5]
1) next = ListNode: [5]
2) current.next = ListNode: [3 -> 2 -> 1]
3) node = ListNode: [4 -> 3 -> 2 -> 1]
4) current = ListNode: [5]
다섯 번째 반복
current: ListNode: [5]
1) next = None
2) current.next = ListNode: [4 -> 3 -> 2 -> 1]
3) node = ListNode: [5 -> 4 -> 3 -> 2 -> 1]
4) current = ListNode: None
여섯 번째 반복
current : None
반복 종료
최종 결과 반환
새롭게 구성된 node를 반환한다.
return node
전체 코드
from typing import Optional
# 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]:
current, node = head, None
while current:
next = current.next
current.next = node
node = current
current = next
return
'Algorithm > LeetCode' 카테고리의 다른 글
LeetCode #409 - Longest Palindrome(가장 긴 팰린드롬) 풀이 (0) | 2022.03.16 |
---|---|
LeetCode #622 - Design Circular Queue(원형 큐 디자인) 풀이 (0) | 2022.03.16 |
LeetCode #232 - Implement Queue using Stacks(스택을 이용한 큐 구현) 풀이 (0) | 2022.03.16 |
LeetCode #049 - Group Anagrams(그룹 애너그램) 문제 풀이 (0) | 2022.03.16 |
LeetCode #021 - Merge Two Sorted Lists(두 개의 연결 리스트 병합) 풀이 (0) | 2022.03.15 |