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:
1 2
Input: head = [1,2,3,4,5], left = 2, right = 4 Output: [1,4,3,2,5]
Example 2:
1 2
Input: head = [5], left = 1, right = 1 Output: [5]
# 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]: def reverseLinkedList(head: ListNode): pre = None current = head while current: next = current.next current.next = pre pre = current current = next dummy = ListNode(-1) dummy.next = head pre = dummy for _ in range(left-1): pre = pre.next right_node = pre for _ in range(right-left+1): right_node = right_node.next left_node = pre.next current = right_node.next pre.next = None right_node.next = None reverseLinkedList(left_node) pre.next = right_node left_node.next = current return dummy.next
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */
funcreverseLinkedList(head *ListNode) { var pre *ListNode current := head for current != nil { next := current.Next current.Next = pre pre = current current = next } }
funcreverseBetween(head *ListNode, left int, right int) *ListNode { dummyNode := &ListNode{Val: -1} dummyNode.Next = head pre := dummyNode for i := 0; i < left-1; i++ { pre = pre.Next } rightNode := pre for i := 0; i < right-left+1; i++ { rightNode = rightNode.Next } leftNode := pre.Next current := rightNode.Next pre.Next = nil rightNode.Next = nil reverseLinkedList(leftNode) pre.Next = rightNode leftNode.Next = current return dummyNode.Next }