0407 TIL

looggi·2023년 4월 6일
0

TILs

목록 보기
55/114
post-thumbnail

leetcode 문제풀기

➡️ 92. Reverse Linked List II

# 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번과 같은 방식으로 값을 넣어줬다.

일단 내 생각대로 한 게 되는지 확인해봤으니 다른 답을 봐볼까 핳

profile
looooggi

0개의 댓글