1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
func reverseBetween(head *ListNode, left int, right int) *ListNode { var pre *ListNode ptr := head for i := 0; i < left-1; i++ { if i == left-2 { pre = ptr } ptr = ptr.Next }
var stack []*ListNode for i := 0; i <= right-left; i++ { stack = append(stack, ptr) ptr = ptr.Next } for i := range stack { if i != 0 { stack[i].Next = stack[i-1] } } if pre != nil { pre.Next = stack[len(stack)-1] } else { head = stack[len(stack)-1] } stack[0].Next = ptr return head }
|