https://leetcode.com/problems/reverse-linked-list-ii/
인덱스 m에서 n까지를 역순으로 만들어라. 인덱스 m은 1부터 시작한다
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
Input: head = [1,2,3,4,5], left = 2, right = 4
Output: [1,4,3,2,5]
Input: head = [5], left = 1, right = 1
Output: [5]
한번에 맞게 풀었지만 깔끔하지 못하고 그냥 주먹구구식으로 풀어서 너무 아쉽다...
그냥 count 변수를 추가해서 n, m일때 연결리스트를 뒤집어 주었는데
뒤집어 줄때 n==m인경우, n=1경우를 하드코딩해서 깔끔하지 않은것 같다.
class Solution:
def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
prev_head, trav = None, head
count = 1
while count != left:
count += 1
prev_head, trav = trav, trav.next
reverse_end = prev = trav
# reverse
if trav.next:
prev, trav = trav, trav.next
count += 1
while count != right+1:
count += 1
next, trav.next = trav.next, prev
prev, trav = trav, next
if prev_head:
prev_head.next = prev
reverse_end.next = trav
if left == 1:
return prev
else:
return head