Given the head of a singly linked list and two integers left and right where left <= right, reverse the nodes of the list from position left to position right, and return the reversed list.
Example 1:
Input: head = [1,2,3,4,5], left = 2, right = 4
Output: [1,4,3,2,5]
Example 2:
Input: head = [5], left = 1, right = 1
Output: [5]
Constraints:
The number of nodes in the list is n.
1 <= n <= 500
-500 <= Node.val <= 500
1 <= left <= right <= n
class Solution:
def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
if not head or left == right:
return head
dummy = ListNode(0)
dummy.next = head
prev, cur = dummy, head
for _ in range(left - 1):
prev, cur = prev.next, cur.next
for _ in range(right - left):
tmp = prev.next
prev.next = cur.next #conect 1->3 i.e. move 3 to head of sublist
cur.next = cur.next.next #connect 2->4,
prev.next.next = tmp #connect 3->2
return dummy.next #cannot return head if left = 1
[실행 결과]
Runtime: 20 ms Memory Usage: 14.5 MB
[접근법]
이전에 풀었던 역순을 해당 range안에서 반복하며 접근
[느낀점]
... 연결 리스트가 싫어지는 순간이었다.....
답지를 안 볼 수가 없는 문제... 도대체 내 머리에선 왜 이런 생각이 떠오르지 않을까...?