ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 92. Reverse Linked List II
    Programming/leetcode 2021. 2. 15. 23:39
    728x90

    이 문제는 책에 나와 있는 풀이는 어려운편인것 같다. (내 이해도가 문제인가)

     

    Linked List문제는 손으로 그려보면 답은 보인다. 

    이 문제 역시 책으로 이해하려고 해보다가 손으로 그려서 해결한 문제이다.

     

    특정 범위가 주어지고, 그 범위 안에 있는 Linked List를 뒤집는 문제이다. 

     

    1) Reverse 후에 앞, 뒤 연결은 어떻게 할것인가?

    2) Reverse는 어떤 방법으로 할것인가?

     

    2번 질문부터 답해보자, 

    -> 나는 head앞에 prev라는 Linked List를 두고 기억하게 했다. 

    1번에 대해서는 cnt라는 변수를 두어, 세어 나가면서 m과 같을때 prev.next 를 reverse된 Linked List와 연결 시켰다. 

     

    code는 더러운 편이다

        def reversebetween(self, head:ListNode, m:int, n:int) -> ListNode:
        	# 뒤집기 함수
            def getReverse(h:ListNode, c:int)->ListNode:
                node, prev = h, None
                # c1은 뒤집기를 위해서 사용하고, c2는 추후 마지막을 연결하기 위해서 사용
                c1 = c
                c2 = c
                # 2->3->4에서 4의 연결부를 기억하기 위해서 사용
                tail = ListNode(None)
                
                while c1 >= 0:
                	# 마지막이면 연결부를 기억하자
                    if c1 == 0:
                        tail = node.next
    
    				# 뒤집기...next라는 임시 변수를 통해서 뒤집자
                    next, node.next = node.next, prev
                    prev, node = node, next
                    c1 -= 1
    
    
    			# 맨 마지막을 연결시켜주기 위해서 사용
                p1 = prev
                while c2 >= 0:
                    if c2 == 0:
                        p1.next = tail
                    p1 = p1.next
                    c2 -= 1
                return prev
    
    		# head보다 앞선 것을 하나 두고, 이전 값을 기억하자.
            root = prev = ListNode(None)
            prev.next = head
            root.next = head
            cnt = 1
            
            while head:
                if cnt == m:
                    prev.next = getReverse(head, n-m)
                    break
                cnt += 1
                prev = prev.next
                head = head.next
            return root.next
    

    'Programming > leetcode' 카테고리의 다른 글

    316. Remove Duplicate Letters  (0) 2021.02.16
    20. Valid Parentheses  (0) 2021.02.16
    328. Odd Even Linked List  (0) 2021.02.15
    24. Swap Nodes in Pairs  (0) 2021.02.15
    1342. Number of Steps to Reduce a Number to Zero  (0) 2021.02.14
Designed by Tistory.