92. Reverse Linked List II
# 原先的節點
[1] -> [2] -> [3] -> [4] -> [5]
# 我們要完成的目標
[1] <- [2] <- [3] [4] -> [5]
| ^
| |
----------------------Last updated
# 原先的節點
[1] -> [2] -> [3] -> [4] -> [5]
# 我們要完成的目標
[1] <- [2] <- [3] [4] -> [5]
| ^
| |
----------------------Last updated
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseListN(self, head: ListNode, n: int) -> ListNode:
if n == 1:
successor = head.next
return successor, head
if not head or not head.next:
return None, head
successor, last = self.reverseListN(head.next, n - 1)
head.next.next = head
head.next = successor
return successor, last# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseListN(self, head: ListNode, n: int) -> ListNode:
if n == 1:
successor = head.next
return successor, head
if not head or not head.next:
return None, head
successor, last = self.reverseListN(head.next, n - 1)
head.next.next = head
head.next = successor
return successor, last
def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
if (left == 1):
successor, last = self.reverseListN(head, right);
return last
head.next = self.reverseBetween(head.next, left - 1, right - 1);
return head