토요일에 배웠던 Linked List가 어려워서 관련 문제를 하나 풀어보았다.
https://leetcode.com/problems/reverse-linked-list-ii/
Reverse Linked List II - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
위 그림을 예제로 개념을 설명하겠다.
1. 2번부터 4번까지 순서를 바꿔준다.
2. 1 ->4, 2->5로 가리키는 주소를 바꿔준다
어렵지 않게 풀지 알았는데 구현하는데에 1시간 정도 걸려서 문제를 풀었다.
파이참의 디버그를 적극적으로 활용해 하나씩 조건을 추가하다 보니 코드가 길어졌다.
# Success
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 left == right:
return head
node, prev = head, None
cnt = 1
flag = 0
while node:
if cnt == left:
flag = 1
temp_node = prev
if flag == 1:
next, node.next = node.next, prev
prev, node = node, next
else:
prev, node = node, node.next
if cnt == right:
flag = 0
if temp_node:
temp_node.next = prev
for i in range(right-left+1):
temp_node = temp_node.next
temp_node.next = next
elif not temp_node and not node :
head = prev
else:
head = prev
t1 = prev
while t1.next:
t1 = t1.next
t1.next = node
break
cnt += 1
return head
'Algorithm' 카테고리의 다른 글
LeetCode) mergeKLists (0) | 2022.05.17 |
---|---|
LeetCode) removeDuplicateLetters (0) | 2022.05.16 |
백준) 괄호 (0) | 2022.05.15 |
LeetCode) 21. Merge Two Sorted Lists (0) | 2022.05.14 |
LeetCode) 배열 파티션 (0) | 2022.05.13 |