# 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 left==right:
return head # 애초에 헤드에 값이 있음
cnt=left-1
new=ListNode()
cur=new
while cnt and head:
cur.next=head
cur=cur.next
head=head.next
cnt-=1
rev=[]
cnt=right-left+1
while cnt and head:
rev.append(head.val)
head=head.next
cnt-=1
while rev:
cur.next=ListNode(rev.pop())
cur=cur.next
while head:
cur.next=head
cur=cur.next
head=head.next
return new.next
보통 링크드리스트를 새로 만들어줄 때 노드에 값을 넣지 않아서 헤드에 값이 없다고 생각해서 첨에 답이 빈 리스트가 나왔는데(오답) 여기서 주어진 head는 값이 들어있는 노드라서 그 값을 빼먹으면 안됐다.
내가 생각한 로직은 중간에 주어진 left~right까지의 노드의 순서가 뒤집혀야하기때문에 left직전까지는 순서대로, left~right 갯수만큼의 노드는 역전해서, 그리고 right이후는 다시 순서대로 넣는 것이었다.
순서를 뒤집는 값을 넣는 건 직전에 풀었던 206번과 같은 방식으로 값을 넣어줬다.
일단 내 생각대로 한 게 되는지 확인해봤으니 다른 답을 봐볼까 핳