주어진 LinkedList를 뒤집은 후에 반환하는 문제이다.
풀이
나의 풀이
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
if not head:
return None
array = []
while head.next:
array.append(head.val)
head = head.next
array.append(head.val)
array.reverse()
answer = temp = ListNode(0)
for i in array:
temp.next = ListNode(i)
temp = temp.next
return answer.next
먼저 주어진 LinkedList의 값들을 배열(array)에 담아주고 뒤집어주었다.
그 뒤에 뒤집어진 array를 정답으로 사용할 LinkedList에 하나씩 담아주는 방식이다.
저번 문제와 마찬가지로 answer는 head로 사용해야 하기 때문에 temp를 사용하였다.
책의 풀이
def reverseList2(self, head: Optional[ListNode]) -> Optional[ListNode]:
node, prev = head, None
while node:
next, node.next = node.next, prev
prev, node = node, next
return prev
node.next를 이전 prev 리스트로 계속 연결하면서 끝날 때까지 반복하는 방법이다.
node가 None이 될 때 prev는 뒤집힌 연결 리스트의 첫 번째 노드가 된다.
prev에 node를, node에 next를 별도로 세팅하며, 이를 이용해 node가 None이 될 때까지 계속 while 반복문을 돌게 된다.
'멋진 개발자 > 알고리즘' 카테고리의 다른 글
LeetCode 141. Linked List Cycle (0) | 2024.06.11 |
---|---|
개발자 성장 기록 63 - 정렬 알고리즘 (with Python) (0) | 2024.06.07 |
LeetCode 21. Merge Two Sorted Lists (0) | 2024.06.03 |
LeetCode 234. Palindrome Linked List (0) | 2024.05.30 |
LeetCode 121. Best Time to Buy and Sell Stock (0) | 2024.05.29 |